Ale*_*lex 2 sql t-sql sql-server sql-server-2008
我有以下数据集
Date Category
2014-01-01 A
2014-01-02 A
2014-01-03 A
2014-01-04 B
2014-01-05 B
...
2014-01-10 B
2014-01-11 A
...
2014-01-20 A
Run Code Online (Sandbox Code Playgroud)
我想要达到的结果是找到A和B的本地最小/最大日期,如下所示:
MinDate MaxDate Category
2014-01-01 2014-01-03 A
2014-01-04 2014-01-10 B
2014-01-11 2014-01-20 A
Run Code Online (Sandbox Code Playgroud)
注意:使用
Select min(date), max(date), category from TABLE Group by category
Run Code Online (Sandbox Code Playgroud)
将创建结果
MinDate MaxDate Category
2014-01-01 2014-01-20 A
2014-01-04 2014-01-10 B
Run Code Online (Sandbox Code Playgroud)
这不是我想要达到的目标
假设您有一个支持窗口函数的DBMS,您可以这样做:
select category, grp, min(date) as min_date, max(date) as max_date
from (
select category, date
, row_number() over (order by date)
- row_number() over (partition by category order by date) as grp
from T
) as X
group by category, grp
order by min(date)
Run Code Online (Sandbox Code Playgroud)
我们的想法是根据日期对所有行进行排序,并根据日期对每个类别中的所有行进行排序.如果这些数字之间的差异发生变化,则意味着类别的连续事件链被另一个类别打破.
| 归档时间: |
|
| 查看次数: |
936 次 |
| 最近记录: |