Mysql 使用动态最大值(日期)选择两个日期之间的所有行
我有一个带有Mysql 使用动态最大值(日期)选择两个日期之间的所有行,mysql,Mysql,我有一个带有用户id时间戳和其他特征的表。我正在尝试选择所有包含用户上次时间戳的行,以及之前的最后90天。由于每个用户的上一次时间戳是不同的,我不能简单地在两个固定日期之间包含一个 我尝试了以下的变化,但运气不好 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 选择mt.user\
用户id
时间戳
和其他特征的表。我正在尝试选择所有包含用户上次时间戳的行,以及之前的最后90天。由于每个用户的上一次时间戳
是不同的,我不能简单地在两个固定日期之间包含一个
我尝试了以下的变化,但运气不好
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
选择mt.user\u id、mt.date\u记录为日期
从成员列表中选择mt
其中DATEDIFF(记录的日期,最大记录的日期)小于90
尝试以下方法:
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;
派生表:创建为具有每个用户的最小和最大日期范围的列表
自连接:当我们为每个用户提供范围时,自连接
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
谢谢您不能在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
您尝试的查询发生了什么?它给出了以下错误:SQL error[1582][42000]:调用本机函数“DATEDIFF”时参数计数不正确。
我想说,很明显,它为什么不工作。您有太多的参数。也许可以使用DATEPART和TO_DAYS的组合?