【发布时间】:2018-07-17 10:36:33
【问题描述】:
我的桌子:Trnevents
emp_reader_id EVENTID DT
102 0 2018-01-04 15:57:04.000
102 0 2018-01-04 15:58:05.000
102 1 2018-01-04 16:46:19.000
102 0 2018-01-04 18:15:27.000
102 1 2018-01-04 18:20:47.000
102 0 2018-01-04 20:02:05.000
102 0 2018-01-04 21:47:29.000
102 1 2018-01-04 22:00:00.000
我使用了这个查询,它工作得很好,但它的输出时间相同
select
emp_Reader_id, cast(DT as date) [date]
, DT as check_in_1
, next_timestamp as check_out_1
from (
select
emp_Reader_id, DT, EVENTID, next_timestamp, next_EVENTID
, dense_rank() over(partition by emp_Reader_id, cast(DT as date) order by DT) in_rank
from trnevents t1
outer apply (
select top(1) t2.DT, t2.EVENTID
from trnevents t2
where t1.emp_Reader_id = t2.emp_Reader_id and t1.EVENTID <> t2.EVENTID
and cast(t1.DT as date) = cast(t2.DT as date)
and t1.DT < t2.DT
order by t2.DT
) oa (next_timestamp, next_EVENTID)
where EVENTID = '0'
) d
group by emp_Reader_id, cast(DT as date),DT,next_timestamp
order by emp_reader_id
结果:
emp_Reader_id date check_in_1 check_out_1
102 2018-01-04 2018-01-04 15:57:04.000 2018-01-04 16:46:19.000
102 2018-01-04 2018-01-04 15:58:05.000 2018-01-04 16:46:19.000
102 2018-01-04 2018-01-04 18:15:27.000 2018-01-04 18:20:47.000
102 2018-01-04 2018-01-04 20:02:05.000 2018-01-04 22:00:00.000
102 2018-01-04 2018-01-04 21:47:29.000 2018-01-04 22:00:00.000
预期输出:
emp_Reader_id date check_in_1 check_out_1
102 2018-01-04 2018-01-04 15:57:04.000 ----
102 2018-01-04 2018-01-04 15:58:05.000 2018-01-04 16:46:19.000
102 2018-01-04 2018-01-04 18:15:27.000 2018-01-04 18:20:47.000
102 2018-01-04 2018-01-04 20:02:05.000 ----
102 2018-01-04 2018-01-04 21:47:29.000 2018-01-04 22:00:00.000
是否有可能超过预期的输出。任何人都可以提供帮助。 提前致谢
【问题讨论】:
-
在表现层修复它。
-
我只在后端工作@jarlh
-
在
check_out_1字段上使用带有分区的ROW_NUMBER。我会回答,除了你的查询很丑(而且因为交叉应用而可怕)。 -
你能帮我@TimBiegeleisen 更好地查询吗
标签: sql sql-server datetime window-functions analytic-functions