【发布时间】:2020-09-23 19:47:35
【问题描述】:
我有一个包含几列的表,但对于任务,重要的是id end created_date,其中id 可以重复。
样本数据:
+--------+--------------+
| id | created_date |
+--------+--------------+
| 12345 | 2020-05-01 |
| 12345 | 2020-04-23 |
| 54321 | 2020-05-12 |
| 12345 | 2020-06-13 |
| 54321 | 2020-01-03 |
+--------+--------------+
我需要编写一个查询来创建一个新列,该列枚举每个id 的出现次数,按升序排列created_date。输出必须类似于以下内容:
+--------+--------------+------------------+
| id | created_date | occurrence_count |
+--------+--------------+------------------+
| 12345 | 2020-04-23 | 1 |
| 12345 | 2020-05-01 | 2 |
| 12345 | 2020-06-13 | 3 |
| 54321 | 2020-01-03 | 1 |
| 54321 | 2020-05-12 | 2 |
+--------+--------------+------------------+
什么查询会输出这个结果表?
【问题讨论】:
-
请向我们展示您的尝试。
-
我没有尝试过,因为我不知道如何去做。我猜也许我必须创建一个我计算的选择并按 id 分组,然后使用它来填充出现计数的列,但我真的不知道该怎么做......
-
下面的答案可能就是你想要的。标量、相关子查询确实有效,但效率较低:
(select count(*) from T t2 where t2.id = T.id and t2.created_date <= T.created_date) -
“我没有尝试”。所以开始尝试吧。
-
是否有重复项? (多行相同的id和created_date)如果是这样,希望它们如何处理?
标签: sql sql-server window-functions