このステートメントを使用して、すべての行をタイムスタンプで昇順に並べています
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 *;
そして私はこれらの結果を得ています:
"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"
ご覧のとおり、createdate
でソートされていません。 RETURNING
句から行を並べ替える方法はありますか?
結果にORDER BYを適用する必要があります。そのためには、DELETEステートメントを共通テーブル式に入れます。次に、それから選択するときにORDER BYを適用できます
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;