Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用动态最大值(日期)选择两个日期之间的所有行_Mysql - Fatal编程技术网

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的组合?