在 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;
有人可以向我解释一下这个问题吗?
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;