需要删除空值

时间:2016-09-17 07:18:24

标签: sql null sql-server-2008-r2

我有一个名为 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

是否有任何可以帮助的功能,我们如何才能实现

2 个答案:

答案 0 :(得分:1)

你试过这个吗?

SELECT ID,MAX(IN) AS IN ,MAX(OUT) AS OUT from test group by ID

<强> == UPDATE ==

我建议您使用当前日期时间重新设计您的表格和更新 inout列,而不是插入新行。

答案 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

注意:以上代码认为每dayID总共会有两个条目