【发布时间】:2021-11-16 17:15:05
【问题描述】:
一个 mysql 表有两个日期(时间戳)列。
仅应选择日期大于当前时间戳的那些行,按最接近的日期排序(从当前时间戳开始计算)。
“date_1”列始终包含一个日期值。
"date_2" 总是包含较晚(较高)的日期值,但有时 "date_2" 未设置日期值(在这种情况下,"date_2" 的时间戳为空或为零,例如以下行名称“D”):
例子:
| name | date_1 | date_2 |
|---|---|---|
| A | 2021-03-29 | 2022-03-29 (1 year later) |
| B | 2021-11-15 | 2021-12-07 |
| C | 2021-11-24 | 2021-12-28 |
| D | 2021-11-25 | (empty) |
以下 mysql 代码无法正常工作(2021 年 11 月 16 日执行):
SELECT * FROM table WHERE date_1 > time() OR date_2 > time() ORDER BY date_1, date_2
(错误的)结果顺序是:
| name | date_1 | date_2 |
|---|---|---|
| A | (2021-03-29, expired) | 2022-03-29 |
| B | (2021-11-15, expired) | 2021-12-07 |
| C | 2021-11-23 | 2021-12-28 |
| D | 2021-11-25 | (empty) |
更改顺序(ORDER BY date_2, date_1)...
SELECT * FROM table WHERE date_1 > time() OR date_2 > time() ORDER BY date_2, date_1
...结果如下(也是错误的):
| name | date_1 | date_2 |
|---|---|---|
| D | 2021-11-25 | (empty) |
| B | (2021-11-15, expired) | 2021-12-07 |
| C | 2021-11-23 | 2021-12-28 |
| A | (2021-03-29, expired) | 2022-03-29 |
在 2021-11-16 上执行的正确 mySQL SELECT 顺序应该是(重要日期以粗体显示):
| name | date_1 | date_2 |
|---|---|---|
| C | 2021-11-23 | 2021-12-28 |
| D | 2021-11-25 | (empty) |
| B | (2021-11-15, expired) | 2021-12-07 |
| A | (2021-03-29, expired) | 2022-03-29 |
例如在 2021-11-24 上执行的正确 mySQL SELECT 顺序应该是:
| name | date_1 | date_2 |
|---|---|---|
| D | 2021-11-25 | (empty) |
| B | (2021-11-15 expired) | 2021-12-07 |
| C | (2021-11-23, expired) | 2021-12-28 |
| A | (2021-03-29 expired) | 2022-03-29 |
例如在 2021-12-08 上执行的正确 mySQL SELECT 顺序应该是:
| name | date_1 | date_2 |
|---|---|---|
| C | (2021-11-23, expired) | 2021-12-28 |
| A | (2021-03-29 expired) | 2022-03-29 |
正确的 SELECT 语句应该是什么样子的?
【问题讨论】:
标签: mysql