在SQLite中按多个字段排序

Jer*_*gan 7 sql sqlite

我有一个简单的表,如:int id, date created_at, date updated_at.我想订购行,以便任何具有updated_at将按行排序的行,任何不行的行将按照排序created_at.问题是,像:

SELECT * FROM table ORDER BY updated_at, created_at 
Run Code Online (Sandbox Code Playgroud)

不起作用.我一直在看自定义订单条款,例如:

ORDER BY CASE WHERE updated_at ISNULL <do something> END, created_at
Run Code Online (Sandbox Code Playgroud)

但似乎无法得到任何工作.救命?

编辑: 我应该指定我希望updated_at字段在created_at字段之前排序.所以,如果数据看起来像:

id  created_at  updated_at
--  ----------  ----------
1   2009-01-08  null
2   2009-09-08  null
3   2009-07-02  null
4   2009-09-05  2009-09-06
5   2009-04-01  null
6   2009-09-07  2009-09-08
Run Code Online (Sandbox Code Playgroud)

我想要的结果如下:

id  created_at  updated_at
--  ----------  ----------
6   2009-09-07  2009-09-08
4   2009-09-05  2009-09-06
2   2009-09-08  null
3   2009-07-02  null
5   2009-04-01  null
1   2009-01-08  null
Run Code Online (Sandbox Code Playgroud)

Ale*_*lli 18

看起来像你在寻找:

ORDER BY COALESCE(updated_at, created_at)
Run Code Online (Sandbox Code Playgroud)

根据文档,coalesce返回

第一个非NULL参数的副本.如果所有参数都为NULL,则返回NULL.必须至少有2个参数.

编辑:鉴于OP的编辑,他可能想要:

ORDER BY COALESCE(updated_at, '1929-9-9') DESC, created_at DESC
Run Code Online (Sandbox Code Playgroud)

或类似的DESC订购技巧; 或者可能

ORDER BY MAX(COALESCE(updated_at, '1929-9-9'), created_at) DESC
Run Code Online (Sandbox Code Playgroud)

不可能从单一且非常特殊的例子中确切地说出OP想要什么,但是这些方法中的某些方法的变体应该解决他的实际问题,无论该问题实际上可能在具体,精确和完整的细节中.