我有一个简单的表,如: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想要什么,但是这些方法中的某些方法的变体应该解决他的实际问题,无论该问题实际上可能在具体,精确和完整的细节中.
| 归档时间: |
|
| 查看次数: |
13685 次 |
| 最近记录: |