SQL:在两个日期之间获取唯一数据

时间:2015-05-11 13:38:42

标签: php mysql

您好我正在使用一个包含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';

1 个答案:

答案 0 :(得分:2)

如果您想要每个学生单次记录,

GROUP BYHAVING就是您要找的:

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')的给定日期范围内的所有记录。