[英]MySQL: JOIN these two tables and fill missing values with the most recent ones
我有以下表格months
date (date)
-----------
2016-11-01
2017-12-01
2017-01-01
2017-02-01
2017-03-01
2017-04-01
2017-05-01
...
以及weeklyhours
date (date) | hours (time)
--------------------------
2017-01-01 | 05:00:00
2017-01-03 | 12:00:00
我想要一個SELECT查詢來合並兩個表並獲得以下輸出result
date (date) | hours (time)
--------------------------
2016-11-01 | NULL
2016-12-01 | NULL
2017-01-01 | 05:00:00
2017-02-01 | 05:00:00
2017-03-01 | 12:00:00
2017-04-01 | 12:00:00
2017-05-01 | 12:00:00
...
因此,我需要將weekylhours
表與months
表weekylhours
在一起,但是我失敗了。 我已經嘗試了最近兩個小時,但沒有成功。
感謝您的幫助。
這是一個古老的問題,但是如果有人需要,這是一個答案。 另外請注意,初始帖子中有錯誤。 第二個日期應該是2017年3月1日,而不是2017年1月3日(否則沒有每月差異)。
總體而言,這取決於“每周小時數”的累加值。 期間值只需要在初始聯接中求和幾個小時,而不必找到最大日期然后創建第二個聯接。
DECLARE @temp_months TABLE(
[mth] [date] NOT NULL
)
DECLARE @temp_weeklyhours TABLE(
[Date] [date] NOT NULL,
[Hours] [time] not null
)
INSERT INTO @temp_months (mth)
VALUES ('2016-11-01'),
('2017-12-01'),
('2017-01-01'),
('2017-02-01'),
('2017-03-01'),
('2017-04-01'),
('2017-05-01')
INSERT INTO @temp_weeklyhours ([Date],[Hours])
VALUES ('2017-01-01','05:00:00'),
('2017-03-01','12:00:00')
SELECT t.mth as [Date], [Hours]
FROM
(
SELECT m.mth, max([Date]) UseDate
FROM
@temp_months as m
LEFT JOIN
@temp_weeklyhours as w
ON m.mth >= w.[Date]
GROUP BY m.mth
) as t
LEFT JOIN
@temp_weeklyhours as h
ON t.UseDate = h.[Date]
ORDER BY t.mth
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.