首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL介于日期范围

问MySQL介于日期范围
EN

Stack Overflow用户
提问于 2013-01-03 10:25:35
回答 3查看 4.6K关注 0票数 1

我有一个场景,我需要根据下表拉出交货日期(示例)

代码语言:javascript
复制
job_id | delivery_date
1      | 2013-01-12
2      | 2013-01-25
3      | 2013-02-15

我想要做的是向用户显示以最早的日期开始的所有交付日期(在本例中是2013-01-12),并在此基础上再添加21天。基本上,我希望它会显示输出,最早的日期是2013-01-12和2013-01-25。2月日期之后的日期并不重要,因为它们不在我的21日期范围内。例如,如果是5天的范围,那么当然不会包括2013-01-25,只会显示最早的日期。

以下是我拥有的主要SQL子句,它仅显示今年开始的作业:

代码语言:javascript
复制
SELECT date, delivery_date 
FROM `job_sheet` 
WHERE print_status IS NULL 
    AND job_sheet.date>'2013-01-01'

是否可以用一个SQL查询来实现这一点,或者我必须使用PHP的混合查询?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-03 10:31:08

您可以使用以下内容:

代码语言:javascript
复制
select *
from job_sheet
where print_status IS NULL
  and delivery_date >= (select min(delivery_date)
                        from job_sheet)
  and delivery_date <= (select date_add(min(delivery_date), interval 21 day)
                        from job_sheet)

请参阅SQL Fiddle with Demo

如果您担心日期不正确,如果您使用查询,那么最好将开始日期传递给您的查询,然后添加21天来获得结束日期。如下所示:

代码语言:javascript
复制
set @a='2013-01-01';

select *
from job_sheet
where delivery_date >= @a
  and delivery_date <= date_add(@a, interval 21 day)

请参阅SQL Fiddle with Demo

票数 2
EN

Stack Overflow用户

发布于 2013-01-03 10:29:11

代码语言:javascript
复制
SELECT date,
       delivery_date
FROM job_sheet
WHERE print_status IS NULL
AND job_sheet.date BETWEEN (SELECT MIN(date) FROM job_sheet) AND
                           (SELECT MIN(date) FROM job_sheet) + INTERVAL 21 DAY
票数 2
EN

Stack Overflow用户

发布于 2013-01-03 12:47:30

代码语言:javascript
复制
SELECT j.job_id
     , j.delivery_date
  FROM `job_sheet` j
  JOIN ( SELECT MIN(d.delivery_date) AS earliest_date
           FROM `job_sheet` d
          WHERE d.delivery_date >= '2013-01-01'
       ) e
    ON j.delivery_date >= e.earliest_date
   AND j.delivery_date < DATE_ADD(e.earliest_date, INTERVAL 22 DAY)
   AND j.print_status IS NULL
 ORDER BY j.delivery_date

(原始查询在job_sheet.date上有一个谓词;上面的查询引用了d.delivery_date...如果它应该引用已安装的date列,则将其更改。)

如果意图是仅显示从今天开始的delivery_date值,则将文字'2013-01-01'更改为返回当前日期的表达式,例如DATE(NOW())

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14132242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档