我有一张包含user_id
timestamp
和其他特征的表格。我试图选择包含用户上次时间戳的所有行以及之前的最后90天。由于每个用户的上次timestamp
用户不同,因此我不能简单地包含具有两个固定日期的BETWEEN
条件。
我尝试了下面的变化而没有运气
SELECT mt.user_id, mt.date_logged AS dates
FROM members_table AS mt
WHERE DATEDIFF(d, mt.date_logged, MAX(mt.date_logged)) < 90
答案 0 :(得分:1)
您不能在WHERE
子句中使用聚合函数,因为在选择行之后聚合发生。您需要加入一个子查询,该子查询返回每个用户的最大值。
SELECT mt.user_id, mt.date_logged AS dates
FROM members_table AS mt
JOIN (
SELECT user_id, DATE_SUB(MAX(date_logged), INTERVAL 90 DAY) AS startdate
FROM members_table
GROUP BY user_id) AS mx
ON mt.user_id = mx.user_id AND mt.date_logged > mx.start_date
答案 1 :(得分:0)
尝试这样的事情:
SELECT mt.user_id, mt.date_logged AS dates
FROM
(SELECT
user_id,
max(date_logged) AS max_dts,
dateadd(max(date_logged), interval -90 day) last90_dts
FROM
members_table
GROUP BY user_id) der
join members_table AS mt ON mt.user_id=der.user_id and mt.date_logged between last90_dts and max_dts;
派生表:创建为每个用户的最小和最大日期范围列表 自我加入:当我们为每个用户设置范围时自我加入。
由于