2016-07-31 29 views
2

我想根據最大時間戳爲每個客戶在MySQL中選擇過去三天的行,但我不確定如何執行此操作。mysql爲每個客戶選擇過去3天的行

示例表:

id  | timestamp   | cust_ID 
899900 | 2016-04-09 12:00:00 | 500219 
899901 | 2016-04-12 16:00:00 | 500219 
899902 | 2016-04-14 11:00:00 | 500219 
899903 | 2016-04-15 12:00:00 | 500219 
909901 | 2016-04-08 16:00:00 | 500230 
909902 | 2016-04-14 11:00:00 | 500230 
909903 | 2016-04-15 12:00:00 | 500230 
939905 | 2016-05-02 19:00:00 | 500240 

到目前爲止,我有以下幾點:

SELECT * 
FROM table 
WHERE timestamp BETWEEN max(timestamp) AND (max(timestamp) - INTERVAL 3 DAY) 
GROUP BY cust_ID 

但它給人的錯誤:

1111 'invalid use of group function'

+1

順便說一下,在sql land中,2不是'3'和1之間。 – Strawberry

回答

1

加入該表到發現最大時間戳爲每個客戶的自身聚合:

SELECT t.* 
FROM mytable t 
JOIN (SELECT cust_ID, MAX(timestamp) max_timestamp -- each cust_ID's max timestamp 
     FROM mytable 
     GROUP BY cust_ID) m 
    ON timestamp BETWEEN max_timestamp - INTERVAL 3 DAY AND max_timestamp 
    AND t.cust_ID = m.cust_ID   -- join on the specific cust_ID's max timestamp 

還要注意的是,你必須有較小的表達第一BETWEEN,即

WHERE myColumn BETWEEN smaller AND larger 

如果你的代碼它周圍的其他方法:

WHERE myColumn BETWEEN larger AND smaller -- don't do this 

它仍然會編譯和執行,但不會返回任何行。

+0

完美的作品,謝謝! –

0

我希望瞭解的權利,你在找什麼但可能是你需要有聚合功能,而不是在哪裏

SELECT cust_id, max(timestamp) 
from table 
GROUP BY cust_ID 
having max(timestamp) BETWEEN date_sub((max(timestamp) , INTERVAL 3 DAY) AND max(timestamp) ; 
+1

無論如何,這仍然是錯誤的。 – Strawberry

+0

錯誤的分號刪除..無論如何 – scaisEdge

+0

不。它在概念上是錯誤的。它不會工作。你不能'有'時間戳。這不是在選擇 – Strawberry