SQL inner join mit top 1
Hallo ich brauche, um die Tabelle der letzten bekannten Wert eines für jeden Eingang.
Begann ich mit diesem
SELECT [MeterReadingId]
,[TimeStampUtc]
,[Val]
,[MeterReading].[InverterInputId]
,[Status]
FROM [Project].[dbo].[MeterReading]
inner join InverterInput on [MeterReading].InverterInputId = [InverterInput].InverterInputId
inner join Inverter on [InverterInput].InverterId = [Inverter].InverterId
where [InverterInput].InputName = 'DayYield' and [Inverter].PlantId = 1
natürlich jetzt habe ich alle Werte, die gehören zu den Eingängen der name 'DayYield und plantId =1
Meine Frage ist, wie können Tabelle nur diejenigen Werte, die neuesten [TimeStampUtc]
Anderen Worten: alle diese [Val] die gehören zur Eingabe des namens 'DayYield und plantId =1 und sind die letzten in die Tabelle eingefügt.
InformationsquelleAutor kosnkov | 2013-04-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für diese, können Sie die ranking-Funktionen,
ROW_NUMBER()
zum Beispiel. So etwas wie dieses:Mit
ORDER BY m.[TimeStampUtc] DESC
wird Ihnen die neuesten[TimeStampUtc]
.Beachten Sie, dass: ich weiß nicht, über die Tabellen " - Strukturen, die Sie verwenden, aber möglicherweise müssen Sie eine weitere Spalte Gruppe, indem Sie in der
PARTITION BY
- Klausel anstelle vonMeterReadingId
.das ist es, vielen Dank!
Du bist jederzeit willkommen 🙂
InformationsquelleAutor Mahmoud Gamal
Einer option ist ein
cross apply
wie:ROW_NUMBER
für die Lesbarkeit.InformationsquelleAutor Andomar
Fand ich die cross apply-Funktion viel leichter zu Lesen. Es bedeutet auch, Sie pflegen die grundlegende Struktur einer normalen Abfrage.
Es ist nicht klar, Was ein normaler SQL-Struktur? Möchten Sie vielleicht einen Verweis auf die CROSS APPLY-Methode, die Sie empfehlen, und ein Hinweis darauf, wie die Nutzung dieser Funktion wird die Erreichung der OP-Ziel, die Rückkehr deutliche Ergebnisse. (sqlserverplanet.com/sql-2005/cross-apply-explained)
InformationsquelleAutor Sven Havgen