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

Php SQL:获取两个日期之间的唯一数据,php,mysql,Php,Mysql,您好,我使用的是一个mysql表学生,它有4列: 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 如果您希望每个学生都有一个记录,那么分组和拥有

您好,我使用的是一个mysql表学生,它有4列:

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 如果您希望每个学生都有一个记录,那么分组和拥有是您想要的:

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”中的所有记录。

Define NOT working。如果需要唯一的数据,请使用DISTINCT或do GROUP BYcolumn@Fred-ii-输出基本上与从学生中选择*相同,其中日期介于“2010-02-10”和“2010-02-12”之间;如果您希望在此处使用“0000-00-00”,请尝试立即使用。甚至可以把它和我的其他评论一起颠倒过来。@Fred ii-在上表中再增加一列,以便说明我的理由:6 Jane 2010-02-11 8。这还是让我把简还给我。如果我使用DISTINCE,这种情况还会发生吗?这对我很有效!我想在特定日期之间吸引一个类的独特访客,这就完成了!请注意:这将为每个学生返回一条记录。我不确定,如果这是你想要的。我正要在评论中提出同样的担忧。我希望它能返回每个学生的所有记录,但上述情况并非如此。有没有关于如何改进以提供所有记录的建议?在我上面的示例中,它应该返回两个条目以表示感谢。这个有效。如果您能解释它是如何工作的,我将不胜感激@user3379221添加了一些解释,还修改了子查询条件,以便更好地匹配您在问题中要求的条件,如果有不清楚的地方,请告诉我。
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');