[英]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.