gpt4 book ai didi

SQL Server 2008 使用 SUM() OVER(ORDER BY...)

转载 作者:行者123 更新时间:2023-12-04 14:39:05 24 4
gpt4 key购买 nike

我正在尝试使用 CTE 和 CROSS JOIN 结果集。我想总结当前行之前的 4 行。我在网上找到的示例不使用 CTE,仅使用新创建的表 ( http://sqlandme.com/2011/08/17/sql-server-denali-over-rows-range/ )。语法应该有效,但我收到一条错误消息“'ROWS' 附近的语法不正确”。

示例输出是使用以下语句:SUM(y) OVER(ORDER BY x ROWS 4 PRECEDING) 总和

X Y 总和


     1          7     0     No prev rows, so sum is 0
2 1 7 Sum = 7
3 2 8 = 1 + 7
4 5 10 = 2 + 1 + 7
5 7 15 = 5 + 2 + 1 + 7
6 34 15 = 7 + 5 + 2 + 1
7 32 48 = 34 + 7 + 5 + 2

有人对查询不正确的地方有什么建议吗?提前致谢。

with quarterResults as (
<subquery in here>
)

--COLUMN1: String
--COLUMN2: Date
--COLUMN3: Date
--COLUMN4: Double
select a.TIC, a.DATADATE, a.EFFDATE, SUM(b.valuei) OVER (ORDER BY a.TIC, a.DATADATE, a.EFFDATE ROWS 4 PRECEDING) AS [SUM]
from quarterResults a
cross join quarterResults b
where a.datadate > b.datadate
group by a.tic, a.datadate, a.EFFDATE, a.valuei
order by a.TIC, a.datadate

最佳答案

您找到的 ROWS/RANGE 文档不适用于 SQL Server 2008 - 它适用于 SQL Server 的 future 版本。

要在 SQL 2008 中完成查询,一种方法类似于:

SELECT a.TIC, a.datadate, a.effdate, x.s
FROM quarterResults a
CROSS APPLY ( SELECT ISNULL(SUM(v), 0)
FROM ( SELECT TOP(4) b.valuei
FROM quarterResults b
WHERE b.datadate < a.datadate
ORDER BY b.datadate DESC ) x(v)
) x(s)
ORDER BY a.TIC, a.datadate

请注意,这可能是一个开销很大的查询。将 OVER 表达式与 ROWS 一起使用可能会更有效,但同样,它在 SQL Server 2008 中不可用。

关于SQL Server 2008 使用 SUM() OVER(ORDER BY...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7652511/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com