這應該很容易,甚至可能是重復的,但今天我的大腦和搜索引擎都不是很有幫助。
我的問題如下:
給定兩個都有的表:
- 開始日期
- 停止日期
- 員工的財產。假設表 A 中的臺號和表 B 中的團隊
- 員工的唯一 ID 號。
以某種誠實的方式將這兩個表連接在一起,這樣您在結果表中的每行只需要一個開始和停止日期。
示例輸入和所需輸出:表 A:
開始日期 停止日期 ID 桌號 01/20 05/20 0100 55 03/20 06/20 0100 56 02/22 04/22 0200 91
表 B(注意員工 0100 的日期重疊):
開始日期 停止日期 ID 團隊編號 01/20 04/20 0100 2 02/20 06/20 0100 3 02/22 04/22 0200 8
示例輸出:
開始日期 停止日期 ID 桌號 團隊編號 01/20 04/20 0100 55 2 02/20 05/20 0100 55 3 02/20 06/20 0100 56 3 02/22 04/22 0200 91 8
一旦表格正確連接,我就可以處理結果日期,但是連接本身會給我帶來問題。我只是不知道如何確保某些超出范圍的日期不會滑入。我目前不確定的加入解決方案是加入
[Table A].[Start Date] <= [Table B].[Stop Date]
[Table B].[Start Date] <= [Table A].[Stop Date]
然后適當地取最大/最小日期(不要擔心那部分,我只關心連接),但我非常懷疑解決方案是否真的那么簡單。
uj5u.com熱心網友回復:
假設我在這里沒有出錯,所需的輸出應該是
開始日期 停止日期 ID 桌號 團隊編號 01/20 04/20 0100 55 2 02/20 05/20 0100 55 3 03/20 04/20 0100 56 2 03/20 06/20 0100 56 3 02/22 04/22 0200 91 8
您對連接的直覺確實是正確的,這會產生正確的結果:
SELECT CASE
WHEN teams.start_date > desks.start_date
THEN teams.start_date
ELSE desks.start_date
END start_date
, CASE
WHEN teams.stop_date < desks.stop_date
THEN teams.stop_date
ELSE desks.stop_date
END stop_date
, desks.id
, desks.desk_number
, teams.team_number
FROM desks
JOIN teams
ON desks.start_date < teams.stop_date
AND teams.start_date < desks.stop_date
AND teams.id = desks.id
dbfiddle 上的作業演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/431163.html
