簡體   English   中英

獲取mysql中兩個日期間隔之間的所有記錄

[英]get all record between two dates interval in mysql

獲取mysql中兩個日期間隔之間的所有記錄

我在 redmine 中有一個 user 和 resource_bookings 表。 我想根據日期期間獲取在兩個給定日期之間工作 8 小時、少於 8 小時、0 小時和超過 8 小時的用戶的記錄。

用戶表:

id  firstname   lastname    status  type
1   Ankur       Mishra      1       user
2   Anil        Chauhan     1       user
3   Jitendra    Singh       1       user
....

資源預訂表:

id  project_id  user_id   start_date                end_date              hours_per_day
1   363         3         2019-09-13 00:00:00       2019-10-31 00:00:00   4 
2   350         3         2019-09-01 00:00:00       2019-11-30 00:00:00   6 
3   316         260       2020-01-01 00:00:00       2020-02-31 00:00:00   8.5 
....

我的預期輸出是:

當用戶選擇開始日期 '2019-08-01' 和結束日期 '2020-02-01' 時,預期輸出如下:

id  user_id   user_name       start_date       end_date     hours_per_day
1   1         Ankur Mishra    2019-08-01       2020-02-01   0 
2   2         Anil Chauhan    2019-08-01       2020-02-01   0 
3   3         Jitendra Singh  2019-08-01       2019-08-31   0
4   3         Jitendra Singh  2019-09-01       2019-09-12   6
5   3         Jitendra Singh  2019-09-13       2019-10-31   10
6   3         Jitendra Singh  2019-11-01       2019-11-30   6
7   3         Jitendra Singh  2019-12-01       2020-02-01   0
....

請注意,在上述預期輸出中,我們需要從開始日期到結束日期的所有日期間隔,即使用戶沒有安排任何時段/時段。 如果兩個時隙周期重疊,我們需要輸出中這些時隙的總和。

您要查找的內容稱為外連接 您希望向所有用戶顯示給定時間段內的日期,但仍會在用戶沒有日期時顯示用戶。

select
  u.id,
  u.first_name,
  u.last_name,
  coalesce(rb.start_date, param.start_date) as start_date,
  coalesce(rb.end_date, param.end_date) as end_date,
  coalesce(rb.hours_per_day, 0) as hours_per_day
from (select date '2019-08-01' as start_date, date '2020-02-01' as end_date) param
cross join user u
left join resource_bookings rb on rb.user_id = u.id 
                              and rb.start_date <= param.end_date
                              and rb.end_date >= param.start_date
order by u.id, rb.id;

如您所見,我還在查詢中使用了交叉連接,以便一次性引入參數。 這不是必需的,否則您必須在查詢中多次放置參數日期。

暫無
暫無

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

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