Jak pobrać tylko kilka pozycji dla danego indeksu

Jak pobrać tylko kilka pozycji dla danego indeksu
KR
  • Rejestracja: dni
  • Ostatnio: dni
0

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

Oziaka
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 26
0

Tak bym to zrobił
SELECT TOP 3 ... ... ORDER BY data DESC

KR
  • Rejestracja: dni
  • Ostatnio: dni
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 :)

FA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 218
1

Nie wiem, czy masz Firebirda 3 (w dwójce chyba nie było jeszcze funkcji okna). Jeśli tak, to sprawdź coś takiego:

Kopiuj
SELECT id, data
FROM (
  SELECT id, data, rank() OVER (
      PARTITION BY id ORDER BY data DESC
      ) r
  FROM NAZWA_TABELI
  ) a
WHERE r <= 3
KR
  • Rejestracja: dni
  • Ostatnio: dni
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.