2017-03-20 48 views
0

第三方系統(傳感器)在識別出某個地點的移動時將發送信息(傳感器ID和日期時間)。SQL中用於DateTime的分類邏輯

SensorID DatetimeInformation 
    1   3/20/2017 07:05 
    1   3/20/2017 07:15 
    1   3/20/2017 07:35 
    1   3/20/2017 07:55 
    2   3/20/2017 07:11 
    2   3/20/2017 07:19 
    2   3/20/2017 07:45 
    2   3/20/2017 07:58 

我想seperately寫SQL邏輯每隔1小時後進行分類上述信息

SensorID Date   TimeDuration DateTimeInformationList (store as VarBinary(Max)) 
1   3/20/2017  7AM - 8AM  3/20/2017 07:05, 3/20/2017 07:15 ,3/20/2017 07:35,3/20/2017 07:55 
2   3/20/2017  7AM - 8AM  3/20/2017 07:11, 3/20/2017 07:19 ,3/20/2017 07:45,3/20/2017 07:58 
+0

看看這篇文章:HTTPS:/ /www.simple-talk.com/sql/t-sql-programming/concatenating-row-values-in-transact-sql/ – Horaciux

回答

0
Declare @YourTable table (SensorID int,DatetimeInformation datetime) 
Insert Into @YourTable values 
(1 ,'3/20/2017 07:05'), 
(1 ,'3/20/2017 07:15'), 
(1 ,'3/20/2017 07:35'), 
(1 ,'3/20/2017 07:55'), 
(2 ,'3/20/2017 07:11'), 
(2 ,'3/20/2017 07:19'), 
(2 ,'3/20/2017 07:45'), 
(2 ,'3/20/2017 07:58') 

;with cte as (
     Select SensorID 
       ,MinDT  = Min(DatetimeInformation) 
       ,MaxDT  = Max(DatetimeInformation) 
     From @YourTable 
     Group By SensorID 
       ,Convert(date,DatetimeInformation) 
       ,DatePart(HOUR,DatetimeInformation) 
) 
Select SensorID 
     ,Date = Convert(date,MinDT) 
     ,TimeDuration = Format(MinDT,'htt')+ ' - ' + Format(DateAdd(HOUR,1,minDT),'htt') 
     ,DateTimeInformationList = Stuff((Select ', ' +Format(DatetimeInformation,'M/dd/yyyy h:mm') 
             From @YourTable 
             Where SensorID=A.SensorID 
              and DatetimeInformation between A.MinDT and A.MaxDT 
             Order By DatetimeInformation 
             For XML Path ('') 
             ),1,2,'') 
from cte A 

返回

SensorID Date   TimeDuration DateTimeInformationList 
1   2017-03-20 7AM - 8AM  3/20/2017 7:05, 3/20/2017 7:15, 3/20/2017 7:35, 3/20/2017 7:55 
2   2017-03-20 7AM - 8AM  3/20/2017 7:11, 3/20/2017 7:19, 3/20/2017 7:45, 3/20/2017 7:58 
+0

這很奇妙。是否有可能找到該TimeDuration的所有DatetimeInformationList的平均時間間隔(分鐘或秒)? – Marid

+0

SELECT DATEDIFF(分,pDataDate,DatetimeInformation) \t \t \t \t FROM( \t \t \t \t \t \t \t SELECT *, \t \t \t \t \t \t \t LAG(DatetimeInformation)OVER(ORDER BY DatetimeInformation)pDataDate \t \t \t \t \t \t \t從TestSensor 凡SensorID = A.SensorID 和A.MinDT和A.MaxDT之間DatetimeInformation \t \t \t \t \t \t)● \t \t \t \t \t \t WHERE pDataDate IS NOT NULL – Marid