Ich suche nach der Möglichkeit, Zeilen mit Top-N-Werten in bestimmten Feld zu wählen. Zum Beispiel möchte ich Zeilen für das letzte und das zweitletzte Datum in der Tabelle auswählen. Also könnte ich das verwenden:Wählen Sie TOP N Werte in WHERE
SELECT F1, F2, F3, report_date FROM My_Table
WHERE report_date = (SELECT MAX(report_date) from My_Table)
OR report_date = (
SELECT MAX(report_date from My_Table
WHERE report_date < (SELECT MAX(report_date) FROM My_Table)
)
Ok, es funktioniert wie erwartet. Aber für, sagen wir, Top 5 Daten wäre der Code sehr anspruchsvoll. Ich habe so etwas versucht:
Select * from AL_CHECKER
where REPORT_DATE in (
select top 2 MAX(REPORT_DATE) from AL_CHECKER order by max(report_date) desc
)
Aber ich habe gerade erfahren, dass TOP N nicht in Unterabfrage unterstützt wird. Was wird also unterstützt und wie ist es so einfach wie möglich zu lesen?
Haben Sie darüber nachgedacht, mit [QUALIFY mit ROW_NUMBER] (https://info.teradata.com/htmlpubs/DB_TTU_16_00/index.html#page/SQL_Reference/B035-1146-160K/hlo1472240810308.html)? – LukStorms
Sie könnten row_number() über (Partition by ... order by) und dann auf top 5 beschränken. – Ramesh