我有一个名为 TEST 的表格,数据存储如下
ID In Out
1 2016-06-24 06:54:00 NULL
1 NULL 2016-06-24 17:09:00
1 2016-06-25 06:54:00 NULL
1 NULL 2016-06-25 17:09:00
我期待输出为
ID In Out
1 2016-06-24 06:54:00 2016-06-24 17:09:00
1 2016-06-25 06:54:00 2016-06-25 17:09:00
我试过
select coalesce (In,Out) from test
where ID=1
但它给了我
In
2016-06-24 06:54:00
是否有任何可以帮助的功能,我们如何才能实现
答案 0 :(得分:1)
你试过这个吗?
SELECT ID,MAX(IN) AS IN ,MAX(OUT) AS OUT from test group by ID
<强> == UPDATE == 强>
我建议您使用当前日期时间重新设计您的表格和更新 in
和out
列,而不是插入新行。
答案 1 :(得分:0)
如Ravi所述,当Insert
时间时,Out
不要换新行。 Update
时间为Out
的记录。
但是使用当前的表结构来实现结果,你可以做这样的事情
;with cte as
(
select *,
((row_number() over(partition by [ID] order by coalesce([In],[Out]))-1)/2)+1 as grp
from Yourtable
)
select Id,min([In]),max([Out])
from cte
group by Id,grp
注意:以上代码认为每day
个ID
总共会有两个条目