Nie bardzo wiem ja sformułować samo pytanie więc zacznę od przykładu. :)
Mam powiedzmy tabelę zamówień z zawierającą kolumny id i data
W wyniku zapytania chciałbym dla każdego id z tabeli z otrzymać trzy ostatnie daty zamówienia
Proszę o pomoc.
Dialekt: Firebird
0
0
Tak bym to zrobił
SELECT TOP 3 ... ... ORDER BY data DESC
0
Dzięki, ale Twoje zapytanie zwróci tylko 3 wiersze dla pierwszego z brzegu id.
Ja potrzebuję po trzy najświeższe wiersze dla każdego id czyli coś takiego :
id1 data1
id1 data2
id1 data3
id2 data4
id2 data5
id2 data6
...
Szukam raczej rozwiązania bez użycia kursora, bo z kursorem wiadomo, łatwo ale długo :)
1
Nie wiem, czy masz Firebirda 3 (w dwójce chyba nie było jeszcze funkcji okna). Jeśli tak, to sprawdź coś takiego:
SELECT id, data
FROM (
SELECT id, data, rank() OVER (
PARTITION BY id ORDER BY data DESC
) r
FROM NAZWA_TABELI
) a
WHERE r <= 3
0
Dzięki Fac!
Twoje sugestia works like a charm jak mawiają Rosjanie ;)
Jedyne co musiałem zmienić, to rank na row_number, bo daty mi się powtarzają i zarówno rank jak i dense_rank zwracał więcej niż 3 pozycje.