id | user_id | date
---|---------|---------
1| 1| 2007/3/4
2| 2| 2007/5/4
3| 1| 2007/3/6
4| 3| 2007/7/4
5| 2| 2007/4/4
6| 3| 2007/3/4
ORDERとLIMITを使わずに「各user_id」の「今日の日付より過去」かつ「今日に近いもの」の「id」を取得するSQLを教えてください。もしくは「できない」ということを納得できる形で説明してください。
以上、よろしくお願いします。
未確認ですが こんな感じでできると思います。
select ta.id from テーブル ta,(SELECT テーブル.user_id u, Max(テー
ブル.date) d
FROM テーブル2
WHERE (((テーブル.date)<now))</p>
GROUP BY テーブル.user_id ) tb where ta.user_id = tb.u and ta.date = tb.d
未確認ですが こんな感じでできると思います。
select ta.id from テーブル ta,(SELECT テーブル.user_id u, Max(テー
ブル.date) d
FROM テーブル2
WHERE (((テーブル.date)<now))</p>
GROUP BY テーブル.user_id ) tb where ta.user_id = tb.u and ta.date = tb.d
今確かめたところ無事目的の結果を得ることができました!
ありがとうございます!
一部修正した部分は、now()の部分をdate_truncをかませて時刻でなく日付で判断する形にしただけです。
SELECT id,usrt_id,date,(SELECT MAX(date) FROM t WHERE usrt_id = a.usrt_id AND date < a.date GROUP BY usrt_id)
FROM t a;
詳しい検証はまだですが、一部修正した形で(usert_id→user_id)ためしたところ、出力結果が6レコードでてきてしまいます。
上記の点は解消できるとして、サブクエリの部分には目的の結果の逆の値が出力されていました。
実際に使ったSQL文を付記します。
SELECT id,user_id,date,(SELECT MAX(date) FROM test_table WHERE user_id = a.user_id AND date < a.date GROUP BY user_id)
FROM test_table a;
-------
追記です。正しくは「逆の値」ではなく「ほぼ逆の値」でした。
今確かめたところ無事目的の結果を得ることができました!
ありがとうございます!
一部修正した部分は、now()の部分をdate_truncをかませて時刻でなく日付で判断する形にしただけです。