Witam,
Mam tabelę w postgresie stworzoną przez:
CREATE TABLE synchronizations (synchronization TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP)
Mogę sobie wybrać dwie ostatnie daty synchronizacji:
SELECT synchronization FROM synchronizations ORDER BY synchronization DESC FETCH FIRST 2 ROWS ONLY
I teraz chciałbym użyć tych dwóch wartości w zapytaniu w filtrowaniu z innej tabeli:
CREATE TABLE emails (addressee TEXT NOT NULL, title TEXT NOT NULL, content TEXT NOT NULL, queued TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP)
I tutaj się pojawia problem, czy można użyć tego poprzedniego selecta jako sub-selecta w between:
SELECT * FROM emails WHERE queued BETWEEN ... ?
Bo tak się nie da:
SELECT * FROM emails WHERE queued BETWEEN (SELECT synchronization FROM synchronizations ORDER BY synchronization DESC FETCH FIRST 2 ROWS ONLY)
Mogę zrobić tak:
SELECT emails.* FROM emails INNER JOIN (SELECT MIN(synchronization) AS date_start, MAX(synchronization) AS date_end FROM (SELECT synchronization FROM synchronizations ORDER BY synchronization DESC FETCH FIRST 2 ROWS ONLY) AS t1) AS t2 ON emails.queued BETWEEN date_start AND date_end
ale czy można to zrobić krócej?