Also in einem normalen SELECT wirds glaube ich echt knifflig aber es gibt ja Execute-Blöcke:
Code:
EXECUTE BLOCK
RETURNS (user_id int, zeit1 timestamp, zeit2 timestamp, minbetween int, first3 int)
As
BEGIN
FOR
SELECT DISTINCT
tabelle.user_id
FROM tabelle
INTO :user_id
DO
BEGIN
FOR
SELECT FIRST 3
tabelle.zeit1,
tabelle.zeit2,
tabelle.minbetween,
tabelle.first3
FROM tabelle
WHERE tabelle.user_id = :user_id
ORDER BY tabelle.minbetween DESC
INTO :zeit1, :zeit2, :minbetween, :first3
DO
BEGIN
SUSPEND;
END
END
END
EDIT: Mein Code gibt jetzt nur die entsprechenden Datensätze zurück. Statt dem Suspend in der Schleife kannst du natürlich auch die 3 Datensätze Updaten und in first3 eine 1 schreiben.
EDIT2: Wobei das Feld First3 schon so aussieht als sollte es gar nicht existieren. Sobald du einen neuen Datensatz einfügst musst du ja alle first3-Felder aktualisieren, weil sich ja was geändert haben könnte.
Bist du sicher dass du dieses Feld brauchst? Auch das Feld minbetween ist so gesehen nicht notwendig weil sich minbetween wie du schon sagtest aus zeit1 und zeit2 ergibt.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."