Sql 如何为非工作日期聚合数据?
我有两张桌子。表1包含工作日期,表2包含日历日期的数值。 我需要连接这些表并输出表2中的值和表1的日期 棘手的是,在非工作日期间,该值应累计并添加到下一个工作日的值中 下面是创建此场景的示例数据的简单脚本 创建表1 [日期]日期主键 在表1中插入值 '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' 创建表2 [日期]日期主键, [Value]INT不为空 在表2中插入值 '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 去 这就是输出的样子:Sql 如何为非工作日期聚合数据?,sql,sql-server,Sql,Sql Server,我有两张桌子。表1包含工作日期,表2包含日历日期的数值。 我需要连接这些表并输出表2中的值和表1的日期 棘手的是,在非工作日期间,该值应累计并添加到下一个工作日的值中 下面是创建此场景的示例数据的简单脚本 创建表1 [日期]日期主键 在表1中插入值 '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'
---------------------
| 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 |
---------------------
我尝试了以下几点:
以x为
选择
按[Date]作为RowID的订单上的行号
,[日期]
来自表1
选择
t1.[日期]
,
选择总和[值]
来自表2
其中,[Date]>ISNULLt1p.[Date]、'0000101'和[Date]您可以尝试在您的条件下使用求和窗口函数来创建组编号,然后聚合非工作日期的数据
;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]