[英]What is the error in mysql statement?
我有兩個名稱分別為raspi_E
和raspi_F
表, raspi_E
結構相同,並且列id
, address
, device_time
。
raspi_E
表中有多個具有相同地址的行,但是我想要最舊的行(相對於時間)。
例如,我多次將地址23
與device_time
值2014-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.