我有下表,其中包含客户的交易详情。
在此表中,每两天发生的连续交易被视为一个段。例如,1 月 27 日至 1 月 29 日之间的交易被视为第 1 段,而3 月 29 日至 4 月 6 日之间的交易被视为第 2 段。我需要按日期顺序对每个段的交易进行排名。如果默认情况下交易不属于任何段,则排名为 1。预期输出低于。
有人可以指导如何在 T-sql 中实现这一点吗?
使用lag()检查TransDate2 天内的变化并将其组合在一起(作为一个段)。之后使用row_number()生成所需的序列
TransDate
row_number()
with cte as ( select *, g = case when datediff(day, lag(t.TransDate) over (order by t.TransDate), t.TransDate ) <= 2 then 0 else 1 end from tbl t ), cte2 as ( select *, grp = sum(g) over (order by TransDate) from cte ) select *, row_number() over (partition by grp order by TransDate) from cte2
db<>小提琴演示