2017-06-15 5 views
0

user_idtimestampなどの特性を持つテーブルがあります。私はその前の最後の90日に加えて、最後のタイムスタンプを含むすべての行を選択しようとしています。ユーザーは最後にtimestampが各ユーザーごとに異なるので、固定日付2つのBETWEEN条件を単純に含めることはできません。ダイナミックMAX(日付)を使用して2つの日付の間のすべての行を選択

は私が

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

試したクエリはどうなりますか? –

+0

次のエラーが発生します: 'SQLエラー[15000] [42000]:ネイティブ関数 'DATEDIFF'の呼び出しでパラメータの数が正しくありません – Lukasz

+0

なぜそれがうまくいかないのかがはっきりしています。パラメータが多すぎます。おそらくDATEPARTとTO_DAYSの組み合わせを使用しますか? –

答えて

1

。各ユーザーの最大値を返すサブクエリに参加する必要があります。

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

派生テーブル:userwise minとmax日付範囲ごとのリストを持って作成されました
自己結合:各ユーザーの範囲があるときに自己結合します。凝集が行を選択後起こるので、あなたは、WHERE句で集計関数を使用することはできません

おかげ

関連する問題