每个客户过去 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
它仍会编译和执行,但您不会返回任何行。
我想根据每个客户的最大时间戳在 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
它仍会编译和执行,但您不会返回任何行。