簡體   English   中英

是否有一種靈活的方法來指定日期范圍?

[英]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。 當然,幾個月后邏輯會有所不同。

  1. 創建一些date_ranges表,其中存儲:系列標識符、范圍號、范圍邊界。
  2. 每次需要此表中尚不存在的系列時,將所需系列插入其中。
  3. 將此表用作查詢中的源表(如果需要,可能帶有縮小范圍的附加條件)。
  4. 刪除以后永遠不會使用的系列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM