[英]Is there a flexible way to specify ranges of dates?
我正在使用 MySQL。
我有一些这样开始的查询:
WITH dates (start_date, end_date) AS (
SELECT '2020-11-01', '2020-11-02'
UNION ALL SELECT '2020-11-02', '2020-11-03',
UNION ALL SELECT '2020-11-03', '2020-11-04')
SELECT dates.start_date, dates.end_date, id, COUNT(*)
FROM dates
INNER JOIN ...
我有时还需要运行相同的查询,但每个日期范围是一周(周一到周日)或日历月。 而且,这些有时有100个以上,除了占用很多行,需要很长时间编写之外,还很容易出现错别字。
有没有更优雅和灵活的方式来实现这一点? 理想情况下,我希望能够仅指定总体开始日期、总体结束日期和期间(每天、每周、每月、每年等)
您可以使用递归 CTE:
with recursive dates as (
select date('2020-11-01') as start_date, date('2020-11-02') as end_date
union all
select start_date + interval 1 day, end_date + interval 1 day
from dates
where start_date < '2020-12-01'
)
select *
from dates;
这是一个 db<>fiddle。 当然,几个月后逻辑会有所不同。
date_ranges
表,其中存储:系列标识符、范围号、范围边界。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.