问题描述
我有一个通知表,想按 read_at 列和 created_at 列排序。
通知表
id | read_at | created_at |
---|---|---|
1 | 空 | 21-jun-2021 12:56:12 |
2 | 空 | 22-jun-2021 13:12:43 |
3 | 24-jun-2021 19:43:42 | 23-jun-2021 16:34:45 |
4 | 23-jun-2021 17:00:03 | 23-jun-2021 16:40:22 |
5 | 空 | 24-jun-2021 11:41:32 |
6 | 24-jun-2021 21:12:12 | 24-jun-2021 19:45:22 |
7 | 25-jun-2021 03:14:08 | 25-jun-2021 03:12:57 |
8 | 空 | 25-jun-2021 09:59:22 |
9 | 25-jun-2021 12:41:40 | 25-jun-2021 12:41:09 |
10 | 26-jun-2021 01:59:59 | 25-jun-2021 20:09:02 |
我想要的是这样的:\
sort (if read_at is null then read_at desc,created_at desc else created_at desc);
结果表应该是:
id | read_at | created_at |
---|---|---|
1 | 空 | 21-jun-2021 12:56:12 |
2 | 空 | 22-jun-2021 13:12:43 |
5 | 空 | 24-jun-2021 11:41:32 |
8 | 空 | 25-jun-2021 09:59:22 |
3 | 25-jun-2021 19:43:42 | 23-jun-2021 16:34:45 |
4 | 27-jun-2021 17:00:03 | 23-jun-2021 16:40:22 |
6 | 24-jun-2021 21:12:12 | 24-jun-2021 19:45:22 |
7 | 29-jun-2021 03:14:08 | 25-jun-2021 03:12:57 |
9 | 25-jun-2021 12:41:40 | 25-jun-2021 12:41:09 |
10 | 26-jun-2021 01:59:59 | 25-jun-2021 20:09:02 |
我无法非常清楚地解释这一点。
我希望按 created_at 日期排序在顶部的未读通知。
如果已阅读通知,则剩余部分应按 created_at 日期排序。
谢谢
解决方法
您可以按布尔表达式 read_at IS NULL
降序排序,这将返回 read_at
位于顶部的所有行,然后按 null
降序(或升序)喜欢你的预期结果):
created_at
,
我相信这应该可以解决您的问题。
现在无法测试。
从通知顺序中选择 id,read_at,created_at 当 read_at 为 null 然后 1 else 0 end desc,created_at desc