【发布时间】:2018-09-28 05:26:39
【问题描述】:
我有一张如下表:
EmpID | Type | timestamp | | block_id
1 | 'R' | 2018-04-15 01:13:15 | 1234
1 | 'P' | 2018-04-15 05:13:15
1 | 'P' | 2018-04-15 05:13:15
1 | 'P' | 2018-04-15 05:13:15
1 | 'D' | 2018-04-15 07:13:15
1 | 'D' | 2018-04-15 08:13:15
1 | 'D' | 2018-04-15 10:13:15
1 | 'R' | 2018-04-15 13:13:00 | 3453
1 | 'P' | 2018-04-15 13:15:15
1 | 'P' | 2018-04-15 13:15:15
1 | 'P' | 2018-04-15 13:15:15
1 | 'D' | 2018-04-15 14:13:00
1 | 'D' | 2018-04-15 15:13:00
1 | 'D' | 2018-04-15 16:13:37
2 | 'R' | 2018-04-15 04:15:00 | 0986
2 | 'P' | 2018-04-15 04:20:00
2 | 'D' | 2018-04-15 05:11:33
我正在尝试获得如下输出:
EmpID | begin_timestamp | end_timestamp | block_id | P_count | D_count
1 | 2018-04-15 01:13:15 |2018-04-15 10:13:15 | 1234 | 3 | 3
1 | 2018-04-15 13:13:00 | 2018-04-15 16:13:37| 3453 | 3 | 3
2 | 2018-04-15 04:15:00 | 2018-04-15 05:11:33| 0986 | 1 | 1
即,这些是某种块,每个 empId 可以有多个块。所以从上面的示例表中,empID'1' 有 2 个块(从第 1 行开始到第 7 行),第 2 个块从第 8 行到第 14 行; empID 2 有 1 个块,第 14 行到第 16 行。
如何获得所需的输出?我被困住了!!请帮忙。
此外,该表没有排序,如上所示,仅用于说明。
更新:抱歉,我之前没有提到,block_id 具有字母数字值,而不仅仅是数字值。 block_id 可以是 'AX2#2', '123R2*',... 任何随机值。
【问题讨论】:
-
向我们展示您的查询?
-
尝试使用group by
-
在手机上确实无法尝试任何代码,但您可以尝试查看子查询以将这些块分配给所有日期
-
您的 SQL 服务器版本是多少?
标签: sql sql-server group-by amazon-redshift window-functions