2016-09-17 82 views
-1

我已经存储了一个名为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

是有可能在没有NULL的情况下有'In'和'Out' –

+0

你可以在同一天有多个条目吗?如果不是,那么为什么你想要分开输入和输出? – Ravi

+0

会有百万条目bt有ID会不同 –

回答

1

你有没有尝试过这个吗?

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

== == UPDATE

我建议重新设计你的表和UPDATEinout列与当前日期时间,而不是插入新行。

+0

我已经尝试过了,它只会给出1条记录,如果我有10个ID = 1的条目,它将只选择最大进出时间 –

+1

为什么你有10个条目?你能不能把这个问题放在你的问题中以便更清晰。你试过什么,你的测试案例是什么?你需要先给我们看。 – Ravi

+0

我想每个ID *和日期*只能有一个输入和输出。如果是这种情况,只需在查询结尾添加',convert(date,coalesce(in,out))'。 (另外一个'by by'子句可以使结果更具可读性。) –

0

正如Ravi提到的那样,如果有Out时间,请不要Insert新行。 UpdateOut时间的记录。

但随着当前表结构来实现的结果,你可以做这样的事情

;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