私のテーブルのデザインは、このようなものです。
id | date | user_id
1 | 2013-02-02 | 1
2 | 2013-02-02 | 2
3 | 2013-02-02 | 5
4 | 2013-02-03 | 6
5 | 2013-02-03 | 7
6 | 2013-02-03 | 1
今、特定の日付または時間枠の新しいユーザーのみのレコードを選択したいと考えています。たとえば、 を選択した場合 date=date('2013-02-03')
、新しいユーザーのレコード、つまりレコード ID 4 と 5 のみが必要であり、ユーザーが既にレコードを持っているため、6 を返すべきではありません。
簡単に言うと、user_id に以前のレコードがないユーザーのレコードのみを返す必要があります。not in 演算子を使用してクエリを作成しようとしましたが、現在の記録日よりも前の日付のパラメーターを指定する方法がわかりません。
[編集]
これが私が到達した場所であり、行き詰まっている場所です。
select id from mytable where date=date('2013-02-03') and user_id not in (select user_id from mytable where date<date('2013-02-03'))
これは、正確な日付が 1 つだけの場合にうまく機能します。しかし、たとえば 1 か月という時間枠になると、日付がその特定のユーザーの記録日である内部クエリを取得する方法がわかりません。
[編集]
having句を使用してこのクエリを試しました。空の結果を返します。
select id, date, user_id from mytable having min(date(date))>=date("2013-01-02") and min(date(date))<=date("2013-02-02")
このクエリで問題が発生しました。すべてのレコードから最小(日付) をチェックします。各 user_id の最小レコードを表示するにはどうすればよいですか?