您好我正在使用一个包含4列的mysql表“student”:
Id Name Date StudentId 1 John 2010-01-15 3 2 Matt 2010-01-10 5 3 Jane 2010-02-10 8 4 John 2010-02-11 3 5 Matt 2010-02-11 5 6 Jane 2010-02-11 8
我想在2010-02-10和2010-02-12之间仅获取表格中的新条目。如果学生在表中有先前的条目,则查询不应返回该值。所以在上面的例子中,查询应该只返回Jane的两个条目,因为John和Matt在指定的日期之前都有一个条目。
这就是我所拥有的,但它不起作用:
SELECT * FROM student
WHERE date(Date)
between '2010-02-10' and '2010-02-12'
and date(Date)
not between '0000-00-00' and '2015-02-09';
答案 0 :(得分:2)
GROUP BY
和HAVING
就是您要找的:
SELECT * FROM student
GROUP BY Name
HAVING DATE(Date) BETWEEN '2010-02-10' AND '2010-02-12';
如果你想要所有记录,我会使用子查询:
SELECT * FROM student
WHERE DATE(Date) BETWEEN '2010-02-10' AND '2010-02-12'
AND Name NOT IN
(SELECT DISTINCT Name FROM student WHERE DATE(Date) < '2010-02-10');
工作原理:
子查询选择所有在日期范围之前有记录的名称,即您在结果中不想要的名称。它产生类似('John', 'Matt')
的集合。然后,主查询选择Name NOT IN ('John', 'Matt')
的给定日期范围内的所有记录。