Suponhamos que como resultado de LEFT JOIN
acabo com uma Films
tabela por exemplo:
eu ia | título | começa | termina |
---|---|---|---|
1 | O senhor dos Anéis | 25/04/2024 17:46:00 | 25/04/2024 20:46:00 |
2 | O Matrix | 05/06/2024 11:46:00 | 05/06/2024 13:46:00 |
Onde ambos begins
e ends
são do tipo timestamp without timezone
. Quero obter registros com a seguinte prioridade:
- Filmes em exibição atualmente
- Filmes que serão exibidos a partir de agora até o especificado
endTime
- Filmes exibidos nos últimos 3 dias
Posso fazer algo como:
SELECT * from FILMS WHERE begins >= Now()::timestamp - INTERVAL '3 days' AND ends < endTime::timestamp
ORDER BY
CASE
WHEN endTime::timestamp > Now()::timestamp AND starts < Now()::timestamp THEN 1
WHEN starts < Now()::timestamp THEN 2
ELSE 3
END;
LIMIT lim;
Existe uma maneira de usar índices para tornar isso mais rápido?