The problem was between the keyboard and the seat folks.
Thanks for lending your knowledge!
有这两个问题:
SELECT classroomid AS crid, startdate AS msd
FROM unitTemplates where classroomid = 6
GROUP BY classroomid
和
SELECT classroomid AS crid, Min(startdate) AS msd
FROM unitTemplates where classroomid = 6
GROUP BY classroomid
第二个查询使用最小函数。我的表中只有一条记录,其中一个为6,第一个查询返回msd = 20100505,第二个查询返回msd = 0(而不是预期的20100505)。如果我将“Min”更改为“Max”,则返回最高(且唯一)的startdate(20100505)。
为什么MySQL不像我正在使用的Min功能?
其他一些信息: courseid是int(11),startdate是bigInt(20)
答案 0 :(得分:1)
请仔细检查实际上只有一行classroomid = 6
。我怀疑有不止一行。
请注意,由于GROUP BY
,您的第一个查询将始终返回最多一行,即使数据库中有多个匹配的行也是如此。使用classroomid = 6
计算行数的正确方法如下:
SELECT COUNT(*)
FROM unitTemplates
WHERE classroomid = 6
请特别注意此查询中没有GROUP BY
子句。
我尝试重新创建你描述的情况并且无法 - 对我来说MySQL的工作方式完全符合预期:
CREATE TABLE unitTemplates (classroomid int(11), startdate bigInt(20));
INSERT INTO unitTemplates values (6, 20100505);
SELECT classroomid AS crid, Min(startdate) AS msd
FROM unitTemplates where classroomid = 6
GROUP BY classroomid;
结果:
6, 20100505
您可以尝试在测试数据库中自己运行这些命令,以说服自己它按预期工作。
答案 1 :(得分:0)
我不确定如何格式化日期列,但您可能希望使用order by子句。如果日期是连续的,您可以使用此查询:
SELECT classroomid AS crid, startdate AS msd
FROM unitTemplates
WHERE classroomid = 6
ORDER BY startdate DESC LIMIT 1;
这将返回具有最大日期的课堂代码6的单行。将“DESC”更改为“ASC”,您将获得最小日期。
答案 2 :(得分:0)
这有点像黑客,但可能会将结果限制为非零值?
WHERE startdate NOT NULL AND startdate > 0
您确定该列中没有空值或归零日期吗?