Postgres Nächste / Vorherige Zeile SQL Query

8

Ich habe die folgenden Tabellenstrukturen in einer Postgres 9.1-Datenbank, aber die ideale Lösung sollte, wenn möglich, DB-agnostisch sein:

%Vor%

Ich habe eine Abfrage (für eine Ansicht), die die nächste und vorherige item.id bereitstellt.

z.B.

%Vor%

Ich kann dies mit der folgenden Abfrage tun:

%Vor%

Können Sie helfen, die folgenden Probleme zu lösen:

1) Gibt es eine Möglichkeit, die IDs wrap, d. h.

  • Die NULL-Element-ID in der letzten Zeile der nextitemid-Spalte sollte 1
  • lauten
  • Die NULL-Element-ID in der ersten Zeile der Previtemid-Spalte sollte 9
  • sein

2) gibt es eine performante Möglichkeit, die nächsten und vorherigen itemids nach Benutzer-ID zu gruppieren, z. B.

NB: In diesem Beispiel sind die itemids für einen Benutzer sequenziell, dies ist bei realen Daten nicht der Fall, die itemids für jeden Benutzer sind verschachtelt.

%Vor%     
davec 17.08.2013, 15:46
quelle

2 Antworten

8

Q1: FIRST_VALUE / LAST_VALUE

Q2: PARTITION BY (wie Roman Pekar bereits vorgeschlagen hat)

SIEHE FIDDLE HIER

%Vor%     
dnoeth 17.08.2013, 16:56
quelle
6

update Ich habe die Funktionen first_value und last_value in PostgreSQL, dank dnoeth erinnerte er mich daran. Seine Abfrage funktioniert jedoch nicht, da last_value mit dem Standardfenster arbeitet RANGE ZWISCHEN UNBOUNDED PRECEDING UND CURRENT ROW und gibt keine korrekten Ergebnisse zurück. Sie müssen entweder den Bereich innerhalb der over-Klausel ändern oder first_value mit order by asc :

verwenden %Vor%

sql Geigen-Demo

vorherige Version
Ich denke, du könntest das tun:

%Vor%

sql Geige-Demo

    
Roman Pekar 17.08.2013 16:00
quelle

Tags und Links