簡體   English   中英

MySQL:加入這兩個表,並用最新的表填充缺失值

[英]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表與monthsweekylhours在一起,但是我失敗了。 我已經嘗試了最近兩個小時,但沒有成功。

感謝您的幫助。

這是一個古老的問題,但是如果有人需要,這是一個答案。 另外請注意,初始帖子中有錯誤。 第二個日期應該是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.

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