Suponha que eu tenha uma tabela records
com a seguinte estrutura
- id (int único)
- atualizado (timestamp)
Eu tenho um input_array
com valores [[id_1, timestamp_1], [id_4, timestamp_4], ...]
. Vou me referir a cada elemento como tuple_1
, tuple_4
, etc.
Estou procurando a consulta mais eficiente (no PostgreSQL v11.2+) para selecionar [id_1, id_4, ...]
, records
mas apenas onde tuple_{n}.updated > row{n}.updated
. Suponha input_array
que pode conter milhares de tuplas e records
mais de um milhão de linhas.
Eu nem sei por onde começar com isso. Lateral join
vem à mente, assim como unnest
, e where in
, mas tudo o que tentei até agora falha miseravelmente
Atualização Estou aberto a input_array
estar em qualquer formato (tuplas, dois arrays separados, o que for), e updated
ser umint
Se você não estiver fixo na entrada da matriz, poderá usar uma comparação de tupla.
Isso pode fazer uso de um índice btree regular em
(id, updated)
Observe que isso usa
=
para ambos os valores e é equivalente aMas você quer comparar os timestamps usando
>
. Você pode fazer isso se juntar contra umavalues
cláusula:Exemplo online: https://rextester.com/GGC83046