Jump to content

Doppelte Abfrage - Maximalwert von DeviceIDs


Direkt zur Lösung Gelöst von icrazy,
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

naja ist ein wneig komplexer der Tabellenaufbau, wollte es hier vereinfacht darstellen:

 

Hier mal meine Abfrage:


 

SELECT MAX(ash.TimeLocal), ash.DeviceId, ad.Model, ad.SerialNo, ash.SnmpColorant, ash.sValue AS Schwarz
FROM ACCSNMPHISTORY ash

INNER JOIN ACCDEVICES ad
ON ash.DeviceId = ad.id

WHERE ash.SnmpColorant = 'black' 
GROUP BY ash.DeviceId, ad.Model, ad.SerialNo, ash.SnmpColorant, ash.sValue
ORDER BY DeviceId

 

Das ist jetzt mal mit der Farbe schwarz, die Abfrage zeigt mir aber nun unterschiedliche TimeLocal Werte an von einer DevideID. D.h. eine DevideID wird zig mal angezeigt mit unterschiedlichen Werten...

Link zu diesem Kommentar

Moin,

 

Wenn du eine "Gruppe" pro DeviceId haben willst, musst du dir Gruppierung so definieren, dass es in anderen Feldern keine Unterschiede gibt. Die Gruppe wird in SQL nur dann gebildet, wenn alle betrachteten Werte gleich sind.

 

(Das dürfte in etwa das sein, was auch MDD meint.)

 

Bekommst du also pro ID mehrere Zeilen, dann werden die sich irgendwo unterscheiden.

 

Es gibt dabei auch oft mehr als einen Weg. Hier dürfte auch ein Sub-Select als Lösungsansatz in Frage kommen. Ein Select könnte dabei nur die DeviceId und das Datum rausfinden, der andere mit diesen Ergebnissen den Rest. Das kann sich in großen Datenbanken auch in der Performance dramatisch unterscheiden, aber vielleicht kommt es darauf hier gar nicht an.

 

Gruß, Nils

 

bearbeitet von NilsK
Link zu diesem Kommentar

sValue ist der Schwellenwert der in meinem Beispiel genannten Farbe "schwarz". Dieser ändert sich täglich, deshalb das Datum Timelocal

Ich möchte nun pro DeviceID und dem letzten (aktuellsten) Wert von Schwarz

 

Das sollte so aussehen:

 

aktuellstes Datum, DeviceID, Modell, Seriennummer, Farbe, Value

 

Also pro DevideID (das sind ca. 40.000 Stück den aktuellsten Wert

 

Link zu diesem Kommentar
With tab1 as
(
SELECT 
	MAX(TimeLocal) as MaxTime, 
	DeviceId
FROM ACCSNMPHISTORY 
	--WHERE ash.SnmpColorant = 'black'
	WHERE SnmpColorant = 'black'
	GROUP BY DeviceId
)
SELECT  
  tab1.MaxTime,  
  tab1.DeviceID,
  ad.Model,
  ad.SerialNo,
  ash.SnmpColorant, 
  ash.sValue AS Schwarz
FROM tab1
	INNER JOIN ACCSNMPHISTORY as ash ON tab1.MaxTime = ash.TimeLocal AND tab1.DeviceID = ash.DeviceID
	INNER JOIN ACCDEVICES ad ON ash.DeviceId = ad.id
ORDER BY DeviceId

So sollte es eigentlich gehen. Kanns leider nicht austesten.

bearbeitet von MDD
Die Abfrage müßte einen Fehler geworfen haben da in der CTE ein unbekannter Alias verwendet wurde
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!
Gast
Dieses Thema wurde für weitere Antworten geschlossen.
×
×
  • Neu erstellen...