【发布时间】:2025-11-25 07:20:05
【问题描述】:
这是我的第一个问题,说实话,在发布此问题之前我没有进行任何搜索,因为我不知道该主题将归类为什么。
这是一个与 SQL 相关的问题,我猜想 Pivot 数据以获得更友好的数据输出。
我有一个 4 列的表,分别是:ID、用户名、状态、日期时间。 状态是决定用户操作的因素,例如登录和注销。
ID Username Status DateTime
1 A 0 2017-10-20 05:00:00
2 A 0 2017-10-20 07:23:10
3 B 0 2017-10-20 07:24:45
4 A 1 2017-10-20 09:50:55
5 A 0 2017-10-20 13:00:56
6 B 1 2017-10-20 17:13:28
7 B 0 2017-10-20 17:50:47
8 A 1 2017-10-20 21:38:17
9 A 0 2017-10-20 21:38:19
10 B 1 2017-10-20 21:40:02
我需要将 Status0 和 Status1 过滤为登录和注销,因此两者之间的任何 Status0 都将被忽略
ID Username Status DateTime
1 A 0 2017-10-20 05:00:00
2 A 0 2017-10-20 07:23:10
4 A 1 2017-10-20 09:50:55
会导致
Username Status0 Status1
A 2017-10-20 05:00:00 2017-10-20 09:50:55
下一个“A”将搜索大于或等于最后一个 Status1 (2017-10-20 09:50:55) 的 Status0 的 DateTime,依此类推,直到数据结束
我需要的最终数据格式如下:
Username Status0 Status1
A 2017-10-20 05:00:00 2017-10-20 09:50:55
B 2017-10-20 07:24:45 2017-10-20 17:13:28
A 2017-10-20 13:00:56 2017-10-20 21:38:17
B 2017-10-20 17:50:47 2017-10-20 21:40:02
A 2017-10-20 21:38:19 null
我怎样才能达到这个结果?我的逻辑说我需要递归比较Status1并找到下一个Status0,但我不确定如何将它放入sql查询中。
感谢任何帮助。之前谢谢。
编辑:我使用的是 SQL Server 2008。
【问题讨论】:
标签: sql sql-server database sql-server-2008-r2 pivot-table