簡體   English   中英

如何通過今天的日期限制MySQL選擇查詢結果

[英]How to limit MySQL Select Query Results By Today's Date

我在一些非常有效的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'

誰能幫我這個?

將其添加為查詢中的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)

CONCAT(LEFT(DATE(EntryDateTime),10),'',HOUR(EntryDateTime),':00:00')

哇,那一行SQL有很多錯誤。 將來建議您提供有關您的數據結構(尤其是類型)的一些線索。

DateHour是一個DateTime字段,格式為“ YYYY-MM-DD HH:MM:SS”

不根據您在問題中發布的內容,該內容在表達式的別名中返回字符串:

SELECT CONCAT(LEFT(DATE(EntryDateTime),10),'',HOUR(EntryDateTime),':00:00')作為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')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM