我在某些PHP中有以下MySQL Select语句,效果很好:
以下是完整的数据集:https://www.dropbox.com/s/65dwada48xh45f1/MySQL_HomeSeerDB.sql?dl=1
SELECT CONCAT(LEFT(DATE(EntryDateTime),10),' ',HOUR(EntryDateTime),':00:00') as DateHour, SUM(HSConnectDown) as HSDownCount FROM State GROUP BY DATE(EntryDateTime),HOUR(EntryDateTime)
我想将结果限制在那些" DateHour"与今天的日期相同。我使用以下代码:
WHERE DATE('DateHour') = DATE(CONVERT_TZ(CURRENT_TIMESTAMP,'+00:00','-6:00'))
我只是不知道如何整理将会过滤结果的MySQL Select语句。
以下是没有where字段的示例输出:
DateHour HSDownCount
------------------- ------------
2018-03-02 13:00:00 1
2018-03-02 14:00:00 0
2018-03-02 15:00:00 0
2018-03-02 16:00:00 0
2018-03-02 17:00:00 1
2018-03-02 18:00:00 0
2018-03-02 19:00:00 2
2018-03-02 20:00:00 0
2018-03-02 21:00:00 1
2018-03-02 22:00:00 0
2018-03-02 23:00:00 0
2018-03-03 0:00:00 0
2018-03-03 1:00:00 1
2018-03-03 2:00:00 0
2018-03-03 3:00:00 0
2018-03-03 4:00:00 0
2018-03-03 5:00:00 0
2018-03-03 6:00:00 0
2018-03-03 7:00:00 0
2018-03-03 8:00:00 0
2018-03-03 9:00:00 0
2018-03-03 10:00:00 1
2018-03-03 11:00:00 1
2018-03-03 12:00:00 0
2018-03-03 13:00:00 0
2018-03-03 14:00:00 0
2018-03-03 15:00:00 1
2018-03-03 16:00:00 0
当我对DateHour使用任何类型的WHERE子句时,我收到错误...示例:
SELECT CONCAT(LEFT(DATE(EntryDateTime),10),' ',HOUR(EntryDateTime),':00:00') as DateHour, SUM(HSConnectDown) as HSDownCount
FROM State
WHERE DateHour = '2018-03-03 11:00:00'
GROUP
BY DATE(EntryDateTime),HOUR(EntryDateTime)
MySQL said:
#1054 - Unknown column 'DateHour' in 'where clause'
任何人都可以帮我吗?
答案 0 :(得分:0)
在查询中将其添加为where子句。
SELECT CONCAT(LEFT(DATE(EntryDateTime),10),' ',HOUR(EntryDateTime),':00:00') as DateHour, SUM(HSConnectDown) as HSDownCount
FROM State
WHERE DATE('DateHour') = DATE(CONVERT_TZ(CURRENT_TIMESTAMP,'+00:00','-6:00'))
GROUP
BY DATE(EntryDateTime),HOUR(EntryDateTime)
答案 1 :(得分:0)
哇,在那一行SQL中存在很多错误。给我们提供一些关于您的数据结构(特别是类型)的线索,将来可能是可取的。CONCAT(左(日期(EntryDateTime),10),'',HOUR(EntryDateTime),':00:00')
DateHour是一个DateTime字段,格式为' YYYY-MM-DD HH:MM:SS'
不根据您在问题中发布的内容,其中表达式的别名返回字符串:
SELECT CONCAT(LEFT(DATE(EntryDateTime),10),'',HOUR(EntryDateTime),':00:00')as DateHour
我认为@rollstuhlfahrer真的想问一下EntryDateTime的数据类型,但是太过震惊了,不能更仔细地阅读这个问题。
让我们假装属性类型是DATETIME或TIMESTAMP然后
SELECT CONCAT(DATE_FORMAT(EntryDateTime, '%Y-%m-%d %H'), ':00') AS dayhour
SUM(HSConnectDown) AS HSDownCount
FROM State
WHERE EntryDateTime BETWEEN
CONVERT_TZ(
CONCAT(CURDATE(), ' 00:00:00')
,'+00:00','-6:00')
AND
CONVERT_TZ(
CONCAT(CURDATE(), ' 23:59:59')
,'+00:00','-6:00')
GROUP BY CONCAT(DATE_FORMAT(EntryDateTime, '%Y-%m-%d %H'), ':00')
如果您想使用DATETIME或TIMESTAMP代替CURDATE(),请使用DATE_FORMAT(value, '%Y-%m-%d')
请注意,WHERE子句中谓词的右手表达式都计算为常量DATETIME值,这意味着如果有可用的查询,则此查询将使用EntryDateTime上的索引。否则它将不会比简单更快:
SELECT CONCAT(DATE_FORMAT(EntryDateTime, '%Y-%m-%d %H'), ':00') AS dayhour
SUM(HSConnectDown) AS HSDownCount
FROM State
WHERE DATE(EntryDateTime)=CURDATE()
GROUP BY CONCAT(DATE_FORMAT(EntryDateTime, '%Y-%m-%d %H'), ':00')