繁体   English   中英

根据日期范围和日期范围检查行数

[英]Checking row count based on date range against date range

我想问你,mysql中是否有任何方法可以做到这一点。 我知道可以按周期完成,但是感觉必须有更好的方法。

我有桌休假

 id | date_from | date_to
 1   2017-02-16   2017-02-19
 2   2017-02-18   2017-02-21
 3   2017-02-12   2017-02-19
 4   2017-02-19   2017-02-21

事实是,用户选择了想要保留的日期范围,例如2017-02-14至2017-02-24,我必须检查他是否仍然可以请求,因为只有4个人可以同时请求休假。

所以我需要查询将检查是否在用户选择的范围内(例如2017-02-14至2017-02-24)是否有4天或更多行。

预先感谢您的回答。

您可以在任何一天进行此操作:

select count(*)
from vacation v
where '2017-02-14' between date_from and date_to;

您可以通过指定每天将其扩展到一个范围:

select dte, count(v.id)
from (select date('2017-02-14') as dte union all
      select date('2017-02-15') as dte union all
      select date('2017-02-16') as dte union all
      select date('2017-02-17') as dte union all
      select date('2017-02-18') as dte union all
      . . .

     ) d left join
     vacation v
     on d.dte between date_from and date_to
group by d.dte
having count(*) > 4;

在应用程序端循环遍历可能更简单。 或者,如果您有日历表,请使用它。

选择该日期范围内的所有行并计算结果:

SELECT count(*) FROM vacation WHERE :input_from BETWEEN date_from AND date_to OR :input_to BETWEEN date_from AND date_to

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM