【发布时间】:2020-06-25 21:53:24
【问题描述】:
我使用了滞后函数来找到之前的值。但是我遇到了一个需要更复杂查询的问题。
这是我的场景。 我们的表目前保留每条记录的月末数据。过去 95 天除外。我们喜欢保留过去 95 天的每日记录。这就是我所说的月末和每日记录
ID Date Amount
123 10/31/2019 52
123 11/31/2019 56
123 12/31/2019 59
123 01/25/2020 32
123 01/26/2020 28
123 ... ..
123 03/12/2020 103
假设 ... 代表 id: 123 直到昨天的每日记录。
我的任务非常适合我们的月末历史数据,但我的每日历史数据遇到了问题
我想要的是能够从上个月的最后一天获得所有月份的最后一个值。
这是我目前的查询
Select ID, Date, Amount,LAG(Amount, 1, 0) OVER(PARTITION BY ID
ORDER BY id,
Date)
AS SharePreviousBalance from dbo.shares
where date >= 20191031
这是我想要的输出,但我当前的查询没有按照我希望的方式工作:
ID Date Amount SharePreviousBalance
123 10/31/2019 52 0
123 11/31/2019 56 52
123 12/31/2019 59 56
123 ... .. ..
123 01/25/2020 32 0
123 01/26/2020 28 0
123 01/27/2020 28 0
123 ... .. ..
123 01/31/2020 28 59
123 ... .. ..
123 02/15/2020 28 0
123 ... .. ..
123 02/29/2020 25 28
123 ... .. ..
123 03/05/2020 29 0
123 ... .. ..
123 03/10/2020 30 0
123 ... .. ..
123 03/12/2020 103 25
有什么想法吗?
谢谢
【问题讨论】:
-
旁白:一旦你
partition by Id,order by Id应该不会有太多好处,只是order by [Date]。
标签: sql sql-server tsql date window-functions