在 mysql 中解释此查询

Explain this query in mysql

有人可以向我解释一下这个问题吗?

SELECT OPEN_DATETIME,
  DATEDIFF(OPEN_DATETIME, '2016-12-13 23:59:59') AS Aging
FROM batch
WHERE DATEDIFF(OPEN_DATETIME,'2016-12-14 23:59:59')>20;

输出

+------------------------+-------+
| OPEN_DATETIME          | Aging |
+------------------------+-------+
| 2017-01-26 16:28:41    |    44 |
| 2017-01-25 16:32:48    |    43 |
| 2017-01-27 02:00:00    |    45 |
+------------------------+-------+

我理解datediff()的意思是获取MySQL的两个日期之间的天数差异。但是我就是不明白为什么在这个查询中需要两个datediff()

查询的第二部分:

SELECT OPEN_DATETIME, DATEDIFF(OPEN_DATETIME, '2016-12-13 23:59:59') AS Aging
FROM batch
WHERE DATEDIFF(OPEN_DATETIME,'2016-12-14 23:59:59')>20;

WHERE 子句中:

DATEDIFF(OPEN_DATETIME,'2016-12-14 23:59:59')>20;

再次使用 DATEDIFF() 函数来限制超过 20 天的结果,因为您不能使用 Aging > 20,因为别名仅在查询中定义。

要使用 Aging 别名,并且只使用 DATEDIFF() 一次,您可以使用:

SELECT a.* FROM (
SELECT OPEN_DATETIME, DATEDIFF(OPEN_DATETIME, '2016-12-13 23:59:59') AS Aging
FROM batch) a
WHERE a.Aging > 20

编辑

或者正如埃里克回答的那样,您可以使用 HAVING 子句来 select 别名。

我相信这应该可以在没有双重差异的情况下工作,只需在别名上使用 HAVING。

SELECT OPEN_DATETIME,
DATEDIFF(OPEN_DATETIME, '2016-12-13 23:59:59') AS Aging
FROM batch
HAVING Aging >20;