簡體   English   中英

mysql語句中有什么錯誤?

[英]What is the error in mysql statement?

我有兩個名稱分別為raspi_Eraspi_F表, raspi_E結構相同,並且列idaddressdevice_time

raspi_E表中有多個具有相同地址的行,但是我想要最舊的行(相對於時間)。

例如,我多次將地址23device_time2014-08-02 16:00:00 : 2014-08-02 16:00:02 : 2014-08-02 16:00:04 ,我想要該行包含最舊的device_time ,即2014-08-02 16:00:00

同樣,在raspi_F表中,我有多個具有相同地址的行,而且我必須獲取最舊的行,在上述示例中,該行將為2014-08-02 16:10:00

現在,我需要在2014-08-02 16:00:00時間加入raspi_E地址23 ,並且在raspi_F加入具有最舊的設備戳2014-08-02 16:10:00的相同地址23

我正在嘗試使用以下查詢:

SELECT raspi_E.address, MIN(raspi_E.device_time) 
    AS time_D , MIN(raspi_F.device_time) 
    AS time_E 
WHERE (raspi_E.device_time BETWEEN '2014-07-31 16:00:00' AND 
       '2014-07-31 16:10:00' GROUP BY raspi_E.address) AND 
       (raspi_F.device_time BETWEEN '2014-07-31 16:03:00' AND 
        '2014-07-31 16:25:00' GROUP BY raspi_F.address) 
       AND raspi_E.address=raspi_F.address

使用上述查詢時出現以下錯誤

1064-您的SQL語法有誤; 檢查與您的MySQL服務器版本相對應的手冊以獲取正確的語法,以在'WHERE(raspi_E.device_time BETWEEN'2014-07-31 16:00:00'AND'2014-07-31 16:10:0'附近使用1行

我使用以下查詢在raspi_E上獲取最舊的行值,並且工作正常。

SELECT address, MIN(device_time) AS device_time
FROM raspi_E 
WHERE device_time BETWEEN '2014-07-31 16:00:00' AND '2014-07-31 16:10:00' 
GROUP BY address ORDER BY `device_time` ASC

您缺少FROM子句和JOIN

SELECT raspi_E.address, 
MIN(raspi_E.device_time) AS time_D , 
MIN(raspi_F.device_time) AS time_E 
WHERE (raspi_E.device_time BETWEEN '2014-07-31 16:00:00' AND '2014-07-31 16:10:00' GROUP BY raspi_E.address) AND (raspi_F.device_time BETWEEN '2014-07-31 16:03:00' AND '2014-07-31 16:25:00' GROUP BY raspi_F.address) AND raspi_E.address=raspi_F.address

應該:

SELECT raspi_E.address, 
MIN(raspi_E.device_time) AS time_D , 
MIN(raspi_F.device_time) AS time_E 
FROM raspi_E 
INNER JOIN raspi_F USING <Whatever_key>
WHERE (raspi_E.device_time BETWEEN '2014-07-31 16:00:00' AND '2014-07-31 16:10:00' GROUP BY raspi_E.address) AND (raspi_F.device_time BETWEEN '2014-07-31 16:03:00' AND '2014-07-31 16:25:00' GROUP BY raspi_F.address) AND raspi_E.address=raspi_F.address

由於您在哪里/分組依據方面遇到問題...這應該為您解決問題...

SELECT
      OldestE.Address,
      OldestE.ETime,
      OldestF.FTime
   from 
      ( SELECT 
              E.address, 
              MIN(E.device_time) ETime
           from
              raspi_E E
           where
              E.Device_Time between '2014-07-31 16:00:00' AND '2014-07-31 16:10:00'
           group by
              E.address ) OldestE
      JOIN ( SELECT 
              F.address, 
              MIN(F.device_time) FTime
           from
              raspi_F  F
           where
              F.device_time BETWEEN '2014-07-31 16:03:00' AND '2014-07-31 16:25:00' 
           group by
              F.address ) OldestF
         ON OldestE.Address = OldestF.Address

暫無
暫無

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

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