主要目的是按顺序对amount列后面的行进行分组,这样,如果两个相同的值之间有任何不同的值,它们将分别编号。这里是原始数据:
SELECT Area, DateA, DateB, Amount
FROM (VALUES
('ABC', '2019-08-18', '2019-08-18 00:07:47.000', 3.75),
('ABC','2019-08-19', '2019-08-19 00:08:47.000', 3.75),
('ABC','2019-08-20', '2019-08-20 00:09:47.000', 3.65),
('ABC','2019-08-21', '2019-08-21 00:09:57.000', 3.75))
AS FeeCollection(Area, DateA, DateB, Amount)
我试过这个,但我不知道真正的问题,以一种特殊的方式数字。
DENSE_RANK() OVER(ORDER BY Area, Amount)
这是我想要达到的示例结果。我在寻找简单的逻辑来做这件事。使用游标或循环时将不会对我有效。
2条答案
按热度按时间bkkx9g8r1#
我相信这就是你想要的。我用
LAG
获取cte中前一行的值,然后使用窗口COUNT
降低…的价值ROW_NUMBER
对于具有相同连续值的每行,按1amount
:我确实认为你
PARTITION BY
条款,您可能需要更改/删除/移动到ORDER BY
. 因为我们只有一个价值Area
当它改变时,不可能知道它的值应该是什么。cunj1qz12#
我会用
lag()
一个累积的总和,但看起来像: