【发布时间】:2020-11-18 05:31:40
【问题描述】:
主要目的是将金额列后面的行按顺序分组,这样如果两个相同的值之间有任何不同的值,它们将分别编号。 这是这里的原始数据:
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)
这是我想要实现的示例结果。我正在寻找简单的逻辑来做到这一点。使用 cursor 或 while 循环对我来说效率不高。
【问题讨论】:
-
我不在电脑前,但我认为您需要:
OVER (PARTITION BY DateA ORDER BY area, amount) -
@AlanBurstein 在使用 DateA 列进行分区时聚合函数可能会给出一些不相关的值。但我很欣赏这种方法。
-
是的 - 我猜。很高兴你把这个整理好了。
标签: sql sql-server group-by dense-rank