SQLITE 带 CASE 的条件排序

SQLITE Conditional Order By with CASE

我想根据布尔值 paid.

以不同的顺序订购 SQLITE 查询

查询在没有 case 语句的情况下工作。

due 列的类型 long 表示 unix 时间的日期。

使用以下查询,我收到以下错误:

extraneous input 'ELSE' expecting {, ';', K_ALTER, K_ANALYZE, K_ATTACH, K_BEGIN, K_COMMIT, K_CREATE, K_DELETE, K_DETACH, K_DROP, K_END, K_EXPLAIN, K_INSERT, K_PRAGMA, K_REINDEX, K_RELEASE, K_REPLACE, K_ROLLBACK, K_SAVEPOINT, K_SELECT, K_UPDATE, K_VACUUM, K_VALUES, K_WITH, UNEXPECTED_CHAR}

SELECT transactions.* FROM transactions
    ORDER BY
    paid ASC,
    CASE paid WHEN 0
        THEN due DESC
        ELSE due ASC
    END,
    date DESC, title ASC

谢谢!

您可以使用:

SELECT *
FROM transactions
ORDER BY
    paid,
    CASE paid WHEN true THEN -1.0*due ELSE due END,
    date DESC,
    title;

这个答案假定 due 是某种长时间戳,然后您预期的 ORDER BY 子句中的第二级排序应该首先放置较新的记录,当 paid为真,当 paid 不为真时相反。