J'utilise cette instruction pour obtenir toutes les lignes ordonnées par horodatage dans l'ordre croissant
DELETE FROM @tableName
WHERE id = ANY (
SELECT id
FROM @tableName
WHERE source = :p1 AND target = :p2 @readCondition
ORDER BY createddate
LIMIT @limit
FOR UPDATE SKIP LOCKED
)
RETURNING *;
Et j'obtiens ces résultats:
"MessageType":"AssignmentChange.v1","CreatedDate":"2019-12-05T10:55:22.230886"
"MessageType":"AssignmentChange.v1","CreatedDate":"2019-12-05T10:55:22.279604"
"MessageType":"AssignmentChange.v1","CreatedDate":"2019-12-05T10:55:22.276191"
"MessageType":"AssignmentChange.v1","CreatedDate":"2019-12-05T10:55:22.202338"
Comme vous pouvez le voir, ils ne sont pas triés par createdate
. Existe-t-il un moyen de trier les lignes de la clause RETURNING
?
Vous devez appliquer un ORDER BY au résultat. Pour ce faire, placez l'instruction DELETE dans une expression de table commune. Ensuite, vous pouvez appliquer un ORDER BY lorsque vous le sélectionnez
with deleted as (
DELETE FROM @tableName
WHERE id = ANY (
SELECT id
FROM @tableName
WHERE source = :p1 AND target = :p2 @readCondition
ORDER BY createddate
LIMIT @limit
FOR UPDATE SKIP LOCKED)
RETURNING *
)
select *
from deleted
order by createddate;