Ich habe eine Tabelle mit mindestens einer "Name" -Spalte und einer "ordinal_position" -Spalte. Ich möchte jede Zeile ab einer bestimmten Zeile die Benutzereingaben wiederholen. Nehmen wir an, der Benutzer gibt "John" ein und dass seine ordinal_position 6 (von insgesamt 10) ist. Wie schleife ich nur die letzten 4 Zeilen, ohne eine Unterabfrage zu verwenden? Ich habe versucht, die "OVER()" -Fensterfunktion zu verwenden, aber es scheint nicht auf den Offset-Teil der Abfrage zu funktionieren, und derselbe Offset nimmt nur Zahlen (soweit ich weiß) keine Zeichenfolgen.Postgres Offset von Wert nicht Nummer
EDIT (als Antwort auf klin):
INSERT INTO foo(id,name,ordinal_position) VALUES
(DEFAULT,'Peter',1),
(DEFAULT,'James',2),
(DEFAULT,'Freddy',3),
(DEFAULT,'Mark',4),
(DEFAULT,'Jack',5),
(DEFAULT,'John',6),
(DEFAULT,'Will',7),
(DEFAULT,'Robert',8),
(DEFAULT,'Dave',9),
(DEFAULT,'Michael',10);
so in meinem FOR, da der Benutzer inputed "John" Ich möchte eine Schleife durch Will-Michael. So etwas wie die folgenden, aber ohne Unterabfrage:
SELECT * FROM foo ORDER BY ordinal_position OFFSET
(SELECT ordinal_position FROM foo WHERE name='John');
Beispieldaten zumindest vor, in Form 'einfügen in my_table Werte ...' – klin
Ohne eine Unterabfrage? Es ist elementar! 'Wählen Sie t1. * von foo als t1 verbinden foo als t2 an (t2.name = 'John' und t1.ordinal_position> t2.ordinal_position);' – Abelisto
Schön! Ich hätte tatsächlich so etwas benutzt, wenn ich nur den Tisch hätte, um den ich mich kümmern müsste, aber ich habe es versäumt, meine gesamte Anfrage zu erklären und aufzuschreiben, da sie viel mehr Bedingungen als die gezeigten hat. Trotzdem danke. –