enter image description here我有一个SQL Server表,其中包含所有用户的滑动信息,包括Userid,滑动日期,部门ID。我需要设置第一次滑动时间,第二次滑动时间,第三次滑动时间,第四次滑动时间等等(一天内)。
对于前两次滑动,一次必须是In Time,其他必须是一行中的Out time。接下来两次滑动为下一行的In Time和Out Time。
如何使用SQL查询?如果只有奇数次的滑动设置为空。
怎么可能?
给出表
UserId Date DeptId
1001 2016-11-20 09:50:46 2
1001 2016-11-20 11:10:26 2
1001 2016-11-20 12:10:10 2
1001 2016-11-20 16:10:30 2
1002 2016-11-20 10:00:00 5
1002 2016-11-20 14:00:00 5
1002 2016-11-20 14:30:00 5
预期产出
UserId InTime OutTime DeptId
1001 2016-11-20 09:50:46 2016-11-20 11:10:26 2
1001 2016-11-20 12:10:10 2016-11-20 16:10:30 2
1002 2016-11-20 10:00:00 2016-11-20 14:00:00 5
1002 2016-11-20 14:30:00 NULL 5
由于
答案 0 :(得分:0)
尝试以下查询
select UserId, in_time, out_time, DeptId
from(
select UserId,
swipetime in_time,
lead(swipetime) over(order by UserId) out_time,
DeptId,
ROW_NUMBER() over(partition by UserId order by UserId) row_num
from table1) as cte
where row_num % 2 != 0
希望这可以帮助你。
答案 1 :(得分:0)
像这样的东西会把你的记录放到数字桶0和1中。然后你用它来交叉出来
SELECT
UserId,Date,DeptId,
DENSE_RANK() OVER (PARTITION BY DeptId, UserId ORDER BY Date) % 2 AS InOut
FROM Table1
ORDER DeptId, UserId, DeptId
尝试并确认in为0且out为1然后我可以帮助你交叉它
我必须再次提到,这种东西有各种各样的边缘情况,即双重滑动,意外滑动,横扫午夜等。
答案 2 :(得分:0)
可能会有双重滑动,意外滑动和夜班滑动可能会导致我的上述功能出现如此多问题,例如Mr.Nick.McDermaid建议。所以我必须将上述功能改为其他方式。非常感谢Nick.McDermaid和Viki888回答我的问题。