每个客户过去 3 天的 mysql select 行

mysql select rows of past 3 days for each customer

我想根据每个客户的最大时间戳在 MySQL 过去三天的行中 select,但我不确定如何执行此操作。

示例table:

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'

我希望能正确理解您要查找的内容,但您可能需要聚合函数而不是 where

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)  ;

将 table 加入自身的聚合,为每个客户找到最大时间戳:

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 中使用较小的表达式 first,即

WHERE myColumn BETWEEN smaller AND larger

如果你反过来编码:

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

它仍会编译和执行,但您不会返回任何行。