簡體   English   中英

如何匯總非工作日期的數據?

[英]How to aggregate data for non-working dates?

我有兩張桌子。 table1有工作日期, table2包含日歷日期的Value
我需要將這些表和 output 的Valuetable2table1的日期連接起來。

棘手的部分是在非工作日期期間, Value應該匯總並添加到下一個工作日期的Value

這是創建此場景的示例數據的簡單腳本。

CREATE TABLE #table1
(
    [Date] DATE PRIMARY KEY
)

INSERT INTO #table1 VALUES 
('2021-02-12'),
('2021-02-15'),
('2021-02-16'),
('2021-02-17'),
('2021-02-18'),
('2021-02-19'),
('2021-02-22'),
('2021-02-23'),
('2021-02-24')

CREATE TABLE #table2
(
    [Date] DATE PRIMARY KEY,
    [Value] INT NOT NULL
)

INSERT INTO #table2 VALUES 
('2021-02-12', 1),
('2021-02-13', 1),
('2021-02-14', 2),
('2021-02-15', 3),
('2021-02-16', 5),
('2021-02-17', 8),
('2021-02-18', 13),
('2021-02-19', 21),
('2021-02-20', 34),
('2021-02-21', 55),
('2021-02-22', 89),
('2021-02-23', 144),
('2021-02-24', 233)
GO

這就是 output 的樣子:

 ---------------------
 | Date       |Value |
 | ------------------|
 | 2021-02-12 | 1    |
 | 2021-02-15 | 6    |
 | 2021-02-16 | 5    |
 | 2021-02-17 | 8    |
 | 2021-02-18 | 13   |
 | 2021-02-19 | 21   |
 | 2021-02-22 | 178  |
 | 2021-02-23 | 144  |
 | 2021-02-24 | 233  |
 ---------------------

我試過以下:

WITH x AS
(
    SELECT
         ROW_NUMBER() OVER (ORDER BY [Date]) AS RowID
        ,[Date]
    FROM #table1
)
SELECT 
    t1.[Date]
    ,(
        SELECT SUM([Value])
        FROM #table2
        WHERE [Date] > ISNULL(t1p.[Date], '00010101') AND [Date] <= t1.[Date]
     ) AS [Value]
FROM x t1
LEFT OUTER JOIN x t1p
ON t1.RowID = t1p.RowID + 1
ORDER BY
    t1.[Date]
GO

這正在工作並產生我需要的東西,但速度非常慢(不是在這個樣本上,而是在實際數據上)。

任何想法如何通過分組或其他一些技術來優化它以使其更快將不勝感激。

您可以嘗試根據您的條件使用SUM window function 來制作組號,然后匯總非工作日期的數據。

;WITH CTE AS (
    SELECT t2.[Date],
           t2.[Value],
          SUM(CASE WHEN t1.[Date] IS NOT NULL Then 1 END) OVER(ORDER BY t2.[Date] DESC) grp
    FROM #table2 t2 
    LEFT JOIN #table1 t1
    ON t1.[Date] = t2.[Date]
)
SELECT MAX([Date]) as 'Date',
       SUM([Value]) as 'Value'
FROM CTE 
GROUP BY grp
ORDER BY [Date]

sqlfiddle

暫無
暫無

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

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