我的桌子设计有点像这样。
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'))
当只有一个确切的日期时,这可以正常工作。但是当涉及到时间框架时,比如一个月,我无法弄清楚如何获取内部查询,其中 date 应该是该特定用户的记录日期。
[编辑]
使用 having 子句尝试了这个查询。它返回空结果。
select id, date, user_id from mytable having min(date(date))>=date("2013-01-02") and min(date(date))<=date("2013-02-02")
好的,我遇到了这个查询的问题。它检查所有记录中的 min(date)。我怎样才能让这个查找每个 user_id 的最小记录?