2016-09-17 4 views
-1

私はTESTとデータと呼ばれるテーブルは私がはnull値

select coalesce (In,Out) from test 
where ID=1 

を試してみました

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 

として出力を期待しています。この

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 

のように保存されているを削除する必要がありますしかし、それは私に与えます

In 

2016-06-24 06:54:00 

を助けることができる任意の関数は、どのように我々は

+0

あたりdayですための2つのエントリが存在しますみなしをそれは 'NULL 'なしで' In'と 'Out'を持つことが可能です –

+0

同じ日に複数のエントリがあるかもしれませんか?いいえの場合、なぜあなたは出入り口にseprateエントリーを持ちたいのですか? – Ravi

+0

そこに何百万というエントリがあるでしょうIDは違うでしょう –

答えて

1

は、あなたはこの1つを試したことを達成することができます、ありますか?

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

== UPDATE ==

私の代わりに新しい行を挿入する現在の日付時刻を再設計し、あなたのテーブルとUPDATEinout列にお勧めします。

+0

私はすでに試してみましたが、それは1レコードしか与えません。ID = 10のエントリが10個ある場合、最大の入出力時間を選択します。 –

+1

なぜ10個のエントリがありますか?あなたはまた、より明確にするためにあなたの質問にこれを置くことができますか?何を試してみましたか、テストケースは何ですか?最初に私たちを見せなければなりません。 – Ravi

+0

ID *と日付*ごとにエントリが1つずつしかないと思います。この場合、単にクエリの最後に '、convert(date、coalesce(in、out))'を追加するだけです。 (そして 'order by'句を追加すると、結果をより読みやすくなります)。 –

0

ラビで述べたように、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 

ノートのように、あなたが何かを行うことができ、結果を達成するためにあなたの現在のテーブル構造を持つ:上記のコードは常にID