MS SQL 窗口函数 LAST_VALUE 在五秒内
Posted
技术标签:
【中文标题】MS SQL 窗口函数 LAST_VALUE 在五秒内【英文标题】:MS SQL Window Function LAST_VALUE in five Seconds 【发布时间】:2015-12-01 13:28:26 【问题描述】:我已经得到了下一个数据Id,接收和余额
现在我需要计算每个时间段的最后一列,所以最后一列应该是接下来五秒内余额列的最后一个值。
Id Received Balance LastPerFiveSeconds
171 2015-11-25 10:05:50.630 13548830.86000000 15026517.59000000
172 2015-11-25 10:05:50.760 13590759.43000000 15026517.59000000
173 2015-11-25 10:05:50.790 13632688.00000000 15026517.59000000
174 2015-11-25 10:05:50.850 13662038.00000000 15026517.59000000
175 2015-11-25 10:05:50.910 13687195.15000000 15026517.59000000
176 2015-11-25 10:05:50.940 13703966.58000000 15026517.59000000
177 2015-11-25 10:05:50.950 13720738.01000000 15026517.59000000
178 2015-11-25 10:05:50.990 13762666.59000000 15026517.59000000
179 2015-11-25 10:05:51.060 13787823.73000000 15026517.68000000
180 2015-11-25 10:05:51.200 14987823.73000000 15026517.68000000
181 2015-11-25 10:05:51.360 15026517.68000000 15026517.68000000
182 2015-11-25 10:05:56.630 15034903.39000000 15034903.39000000
查询看起来像这样
SELECT id, Received, Balance, LAST_VALUE(Balance) OVER (PARTITION BY DATEADD(S, 5, [Received]) ORDER BY Received RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
FROM Data
【问题讨论】:
您的问题是什么?请把你的“得到”和“需要”分开。 你的意思是 5 秒而不是 5 分钟? 这个问题没有显示任何研究工作。 我需要使用 Received 作为时间窗口从余额中计算 LastPerFiveMinute @TabAlleman 我正在使用 LAST_VALUE(Balance) OVER (ORDER BY Received RANGE BETWEEN UNBOUNDED PRECEDING 和 UNBOUNDED FOLLOWING) 但无法控制当时的名声 【参考方案1】:您可以使用CROSS APPLY
来实现您想要的。它将查看未来五分钟内的余额并选择最近的余额:
SELECT do.Id ,
do.Received ,
do.Balance ,
ISNULL(details.Balance,do.Balance) AS LastPerFiveMinute
FROM dbo.data do
OUTER APPLY ( SELECT TOP 1
Balance
FROM dbo.Data di
WHERE di.Received <= DATEADD(MINUTE, 5,
do.Received)
AND di.Received >= do.Received
ORDER BY Received DESC
) details
ORDER BY Received ASC
【讨论】:
非常好的答案,问题是在更大的数据集中会运行很长时间,我在这个数据集上有数千个事务,这就是我考虑使用窗口函数的原因 不太正确 14112552 是 '20151201 15:45:00' 和 14112553 for 2015-12-01 15:49:59.000 的结果,因此它们在 5 分钟内,但该因素会对它们进行不同的分组 您不能在您的情况下使用LAST_VALUE
,因为它目前可能不是特定的RANGE
值。 LAST_VALUE
在数据集中有间隔(>5 分钟)时也不起作用。以上是关于MS SQL 窗口函数 LAST_VALUE 在五秒内的主要内容,如果未能解决你的问题,请参考以下文章
如何在 MS SQL 中将 last_value 与 group by 结合使用?
SQL Server ->> FIRST_VALUE和LAST_VALUE函数
sql SQL Server 2012 TSQL新函数LAG,LEAD,FIRST_VALUE和LAST_VALUE
窗口分析函数19_Mysql查询窗口函数里第一个最后一个第N个元素的值值案例详解(FIRST_VALUE LAST_VALUE NVH_VALUE)