2017-03-01 2 views
1

I eine Tabelle mit vielen Variablen, die Zeitreihendaten Beispiel haben:Abrufen der Faust Zeile einer Abfrage von einer Liste

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 

ich brauche die Tags (Mehrfach-) zwischen Startdate und EndDate und ein Intervall abzufragen (5min/15 min)

Diese Abfrage funktioniert:

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 

Mit den Parametern:

  • Intervall: 5mins
  • Tag: 'Tag1'
  • Startdate: '2014.02.26 09.00.00'
  • EndDateTime: '2014.02.26 11.00.00'

Ergebnis Abfrage:

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 

das funktioniert aber nur, wenn wir 1 Tag zu einem Zeitpunkt abfragen. Normalerweise möchten wir eine Liste von Tags abfragen. Wenn ich eine Liste von Tags 'Tag1, Tag2' abfrage, gibt die Abfrage nur Ergebnisse von Tag1. Bitte beraten.

+0

Tag Ihre Frage mit der Datenbank Sie verwenden. –

Antwort

0

Ich glaube, Sie nur tagname zum partition by hinzufügen müssen und entfernen Sie die Filterung in der 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

genial. Das hat funktioniert. Vielen Dank Gordon –

Verwandte Themen