2016-09-26 11 views
0

以下の私のデータのサンプルセットです:データをチェックして水平に表示する方法は?

ID DATETIME  
1  29-12-2016 03:00 
2  28-12-2016 14:00 
3  28-12-2016 16:00 
4  25-12-2016 00:00 

期待される結果:別のレコードがある場合は、各レコードのために教えて、このようなクエリを記述する方法

ID DATETIME    24HoursDataExisted 
1  29-12-2016 03:00  0 
2  28-12-2016 14:00  1 
3  28-12-2016 16:00  1 
4  25-12-2016 00:00  0 

は、次の24時間以内に存在していました?それはDATEADD(hh, 24,datetime)と関係がありますが、SQLに書き込む方法がわかりません。
上記のサンプルデータから、ID1とID3のレコードのためID2レコードは真となり、ID1レコードのためID3は真です。

答えて

0

あなたは2012を使用している場合は、あなたがリード機能を使用することができます。.. 2008年の

select id,datetimee, 
case 
when datediff(hour,convert(datetime,datetimee,105),cast(lead(convert(datetime,datetimee,105)) 
over (order by convert(datetime,datetimee,105)) as datetime))<=24 
then 1 else 0 end 
from #temp 
order by id desc 

、あなたは

;with cte 
as 
(
select id,convert(datetime,datetimee,105) as dtval, 
row_number() over (order by id desc) as rownum 
from #temp 
) 
select c1.id,c1.dtval, 
case when datediff(hour,c1.dtval,c2.dtval)<=25 then 1 else 0 end as comecol 
from cte c1 
left join cte c2 
on c1.rownum+1=c2.rownum 

以下の出力を使用することができます

id datetimee   somecol 
4 25-12-2016 00:00 0 
3 28-12-2016 16:00 1 
2 28-12-2016 14:00 1 
1 29-12-2016 15:00 0 
+0

をどこ説明することができます'datetimee'はどこから来ますか? – Twinkles

+0

ご返信ありがとうございますが、アプリケーションはまだSQL Server 2008上で動作しています –

+0

@ Mr.SuicideSheep:2008年のアップデートを参照してください – TheGameiswar

関連する問題