【发布时间】:2018-11-20 23:45:10
【问题描述】:
我正在尝试折叠按日期排序的数据。在按人员和类型分组时。
数据存储在 SQL 服务器中,如下所示 -
seq person date type
--- ------ ------------------- ----
1 1 2018-02-10 08:00:00 1
2 1 2018-02-11 08:00:00 1
3 1 2018-02-12 08:00:00 1
4 1 2018-02-14 16:00:00 1
5 1 2018-02-15 16:00:00 1
6 1 2018-02-16 16:00:00 1
7 1 2018-02-20 08:00:00 2
8 1 2018-02-21 08:00:00 2
9 1 2018-02-22 08:00:00 2
10 1 2018-02-23 08:00:00 1
11 1 2018-02-24 08:00:00 1
12 1 2018-02-25 08:00:00 2
13 2 2018-02-10 08:00:00 1
14 2 2018-02-11 08:00:00 1
15 2 2018-02-12 08:00:00 1
16 2 2018-02-14 16:00:00 3
17 2 2018-02-15 16:00:00 3
18 2 2018-02-16 16:00:00 3
该数据集包含大约 120 万条与上述类似的记录。
我想从中得到的结果是 -
person start type
------ ------------------- ----
1 2018-02-10 08:00:00 1
1 2018-02-20 08:00:00 2
1 2018-02-23 08:00:00 1
1 2018-02-25 08:00:00 2
2 2018-02-10 08:00:00 1
2 2018-02-14 16:00:00 3
我通过运行以下查询获得了第一种格式的数据 -
select
ROW_NUMBER() OVER (ORDER BY date) AS seq
person,
date,
type,
from table
group by person, date, type
我只是不知道如何将最小日期与人员和类型的其他不同值保持一致。
【问题讨论】:
-
标记您正在使用的 DBMS(即
MySQL、SQL Server等)。 -
我已经添加了标签 sql-server。谢谢推荐。
标签: sql sql-server gaps-and-islands distinct-values