Mysql 添加日期前后逻辑不一致时返回的行数

Mysql 添加日期前后逻辑不一致时返回的行数,mysql,Mysql,我有一个数据库,里面有一个学生访问我们辅导中心的信息。每次学生访问时,都会生成一份记录,其中包括他们的姓名、学生编号、访问日期、他们在那里的时间以及他们在那里的时间 我们为每个学期创建新的表格 我被要求对某一学期有多少学生进行不重复的计数,所以我运行了以下程序 SELECT * FROM `tutoringdata_201350` group by `anum` anum是学生唯一的识别号,返回5525条记录中的524条结果。理论上这应该是我的不重复计数 然后,我被要求在同一个表中的某个日期之

我有一个数据库,里面有一个学生访问我们辅导中心的信息。每次学生访问时,都会生成一份记录,其中包括他们的姓名、学生编号、访问日期、他们在那里的时间以及他们在那里的时间

我们为每个学期创建新的表格

我被要求对某一学期有多少学生进行不重复的计数,所以我运行了以下程序

SELECT * FROM `tutoringdata_201350` group by `anum`
anum
是学生唯一的识别号,返回5525条记录中的524条结果。理论上这应该是我的不重复计数

然后,我被要求在同一个表中的某个日期之前和之后获取记录,所以我运行

SELECT * FROM `tutoringdata_201350` WHERE `cDate` <= "09/30/2013" group by `anum`
这似乎也可行,返回结果中没有重复的学生,但返回结果的总数为428


375+428是803,而不是我所期望的524。我在遵循逻辑方面遇到了问题,这两种不同类型的查询中的哪一种产生了不准确的结果。

您误用了有害的非标准MySQL扩展到
GROUP BY

你可能想要这样的东西

SELECT COUNT(DISTINCT anum) unique_students
  FROM `tutoringdata_201350`
 WHERE cDate <= 'whatever'
你的例子中的比较是不正确的编辑。如果日期以文本字符串形式存储为
MM/DD/YYYY
,则需要使用以下类型的比较

WHERE STR_TO_DATE(cDate, '%m/%d/%Y') <= '2013-09-30'

总的来说,有四个不同的学生。九月份有三个。十月份有两个。如果你把这两个数字加起来,你会得到五个。更重要的是,通过将这两个数字相加,你在重复计算Joe。

日期错误是因为在我来到这里之前几年,应用程序从旧的access数据库移植到基于Web的php应用程序。数据的格式与access数据库中的数据相同,因此可以将所有数据集中在一起并报告。因此,日期采用文本字段中的MM/DD/YYYY格式。选择COUNT(DISTINCT
anum
)unique\u students FROM
tutoringdata\u 201350
实际返回524,这是我的原始计数。在两个方向上运行您的计数将产生375和428,与上面我的原始值完全相同。
SELECT COUNT(*) visits,
       anum
  FROM `tutoringdata_201350`
 WHERE cDate <= 'whatever'
 GROUP BY anum
WHERE cDate <= '2013-09-30' 
WHERE STR_TO_DATE(cDate, '%m/%d/%Y') <= '2013-09-30'
Joe     Sept 28
Joe     Sept 29
Mary    Sept 30
Henry   Sept 30
Joe     Oct 1
Stephen Oct 1