2017-03-01 60 views
1

我有與具有時間序列數據 實施例許多標籤的表:獲取查詢的拳頭行從列表

TagName Value DateTime    Quality 
Tag1  75 09/24/2015 01:05:10 192 
Tag1  76.5 09/24/2015 01:05:20 192 
Tag1  75 09/24/2015 01:05:40 192 
Tag1  74.5 09/24/2015 01:06:00 192 
Tag2  75 09/24/2015 01:05:10 192 
Tag2  76.5 09/24/2015 01:05:20 192 
Tag2  75 09/24/2015 01:05:40 192 
Tag2  74.5 09/24/2015 01:06:00 192 

我需要查詢開始日期和結束日期和時間間隔之間的標籤(多個) (5分鐘/ 15分鐘)

這個查詢的工作原理:

SELECT * FROM 
(SELECT [DateAndTime],[TagName],[Val],row_number()over(partition by datepart(minute, [DateAndTime])order by [DateAndTime]) as "rn" 
FROM [FloatTable] WHERE 
([DateAndTime] BETWEEN @StartDateTime AND @EndDateTime) AND 
([TagName] IN (@TagName)) AND 
((DATEPART("n",[DateAndTime]) % @IntervalInMins = 0))) x 
WHERE rn = 1 

隨着參數:

  • 間隔:5分鐘
  • 標籤: 'Tag1中'
  • 的startDateTime: '2014年2月26日9點零零分00秒'
  • EndDateTime: '2014年2月26日11:00:00'

結果查詢:

TagName Value DateTime    Quality  
Tag1  75 09/24/2015 01:05:10 192  
Tag1  76.5 09/24/2015 01:10:10 192  
Tag1  75 09/24/2015 01:16:40 192 

但是,如果我們在一個時間查詢1個標籤這僅適用。通常我們想要查詢一個標籤列表。如果我查詢標籤'Tag1,Tag2'的列表,則查詢僅給出Tag1的結果。請指教。

+0

標籤您與您正在使用的數據庫的問題。 –

回答

0

我想你只需要添加tagnamepartition by並刪除where過濾:

SELECT x.* 
FROM (SELECT [DateAndTime], [TagName], [Val], 
      row_number() over (partition by tagname, datepart(minute, [DateAndTime]) 
           order by [DateAndTime] 
           ) as rn 
     FROM [FloatTable] 
     WHERE ([DateAndTime] BETWEEN @StartDateTime AND @EndDateTime) AND 
      ((DATEPART("n",[DateAndTime]) % @IntervalInMins = 0)) 
    ) x 
WHERE rn = 1 
+0

真棒。這工作..非常感謝戈登 –