【发布时间】:2014-12-28 21:59:58
【问题描述】:
我得到的数据集如下
name date
x 2014-01-01
x 2014-01-02
y 2014-01-03
x 2014-01-04
我正在努力得到这个结果
name date row_num
x 2014-01-01 1
x 2014-01-02 2
y 2014-01-03 1
x 2014-01-04 1
我已尝试运行此查询
select name,
date,
row_number () over (partition by name order by date) as row_num
from myTBL
但不幸的是我得到了这个结果
name date row_num
x 2014-01-01 1
x 2014-01-02 2
y 2014-01-03 1
x 2014-01-04 3
请帮忙。
【问题讨论】:
-
哪个数据库 - sql server, oracle 等?以这种方式分配行号的逻辑是什么?你最后想做什么?
-
您的
partition by声明说分区仅基于name。你得到的结果就是你要求的结果。您似乎想要的结果是每次 runname更改时分区都会重置。我不认为你可以用一个简单的窗口函数来做到这一点。您需要一到两级子查询。 -
对于未来的提问者,这属于称为gaps-and-islands 的问题类别。
标签: sql gaps-and-islands