将多行转换为一行

Asr*_*san 4 sql-server

我有以下来自指纹设备的数据,每个员工的进出都被记录下来。

UserId         CheckTime              CheckType
------        -----------            -----------
  2      2020-08-03 08:15:12.053          I
  2      2020-08-03 16:00:00.053          O
  2      2020-08-04 08:00:12.053          I
  2      2020-08-04 16:10:00.053          O
Run Code Online (Sandbox Code Playgroud)

我希望上述数据如下:

UserId         CheckTime           CommingTime                 LeavingTime
------        -----------          -----------                -------------
  2           2020-08-03           08:15:12.053               16:00:00.053
  2           2020-08-04           08:00:12.053               16:10:00.053
Run Code Online (Sandbox Code Playgroud)

**注意:**一个用户每天可以有多个 In Out 记录

我尝试了以下答案,但没有帮助:

如何使用SQL将多行合并为一行?

任何的想法??

Aki*_*ina 6

大意:

WITH cte AS ( SELECT UserId, 
                     CheckTime, 
                     LEAD(CheckTime) OVER (PARTITION BY UserId ORDER BY CheckTime) NextTime, 
                     CheckType, 
                     LEAD(CheckType) OVER (PARTITION BY UserId ORDER BY CheckTime) NextType )
SELECT UserId, CheckTime, NextTime
FROM cte
WHERE CheckType = 'I'
  AND NextType = 'O'
Run Code Online (Sandbox Code Playgroud)

根据需要进行修改 - 提取日期和/或时间部分,检查日期部分是否相等等。