我有一个SQL表,其中列出了各个事件,并且我尝试汇总以获取一组事件,如下所示。
id |Name | Date|
0 |A |2018-05-08
1 |A |2018-05-09
2 |B |2018-05-11
3 |B |2018-05-12
4 |A |2018-05-17
5 |A |2018-05-17
6 |A |2018-05-18
7 |C |2018-05-25
8 |C |2018-05-26
9 |B |2018-05-27
成为:
Name|Group
|A |1
|B |2
|A |3
|C |4
|B |5
我相信这是Count()的某种形式,然后是OVER BY,它们总是使我绊倒。我不知道该怎么算,因为很少将这些名称组合在一起。到目前为止,我有以下内容:
select
Name
,Count(Name)
from table
Group BY
Name
没有理由认为这是一个隔and问题。我的意思是,但是有一个更简单的解决方案。
在这种情况下,请使用lag()
和row_number()
:
select name, row_number() over (order by date, id) as grp
from (select t.*,
lag(name) over (order by date, id) as prev_name
from t
) t
where prev_name is null or prev_name <> name;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句