我有date_end列,我需要对其进行排序,这仅是最重要的日期比今天大的行。
因此,将日期大于今天=“ 1”,将日期小于=“ 0”并进行排序。
因此具有以下数据表:
+----+------------+
| id | date_end |
+----+------------+
| 1 | 31-01-2018 |
+----+------------+
| 2 | 01-05-2019 |
+----+------------+
| 3 | 31-05-2018 |
+----+------------+
| 4 | 31-07-2019 |
+----+------------+
| 5 | 31-04-2020 |
+----+------------+
| 6 | 31-08-2019 |
+----+------------+
我需要虚拟添加“实际”列并对其进行排序:
+----+------------+--------+
| id | date_end | actual |
+----+------------+--------+
| 1 | 31-01-2018 | 0 |
+----+------------+--------+
| 2 | 01-05-2019 | 0 |
+----+------------+--------+
| 3 | 31-05-2018 | 0 |
+----+------------+--------+
| 4 | 31-07-2019 | 1 |
+----+------------+--------+
| 5 | 31-04-2020 | 1 |
+----+------------+--------+
| 6 | 31-08-2019 | 1 |
+----+------------+--------+
类似:
在date_end
> DATE(NOW())然后1 ELSE 2 END
答案 0 :(得分:2)
然后按照您的建议进行操作:
ORDER BY CASE WHEN date_end > curdate() THEN 1 ELSE 0 END
答案 1 :(得分:1)
在MySQL中,您可以利用布尔表达式可以直接使用的事实。所以:
order by (date_end > curdate()) desc
“真”>“假”,因此desc
将真值放在第一位。