gpt4 book ai didi

mysql - MySQL 的奇怪查询结果

转载 作者:行者123 更新时间:2023-11-29 08:26:05 27 4
gpt4 key购买 nike

我正在数据库上测试一个查询,但由于某些奇怪的原因,它随机返回一组不同的结果。有趣的是,它从数千行中仅返回两个不同的结果集,并且查询将随机返回其中之一,但不会返回其他结果。

查询仅返回两个数据集之一是否有原因?下面的查询和架构。

我的目标是在给定时间段内为给定赛道选择最快圈速,但仅为每个用户选择最快圈速(因此前 10 名中始终有 10 个不同的用户)。

大多数情况下会返回正确的结果,但有时会返回完全不同的结果集。

SELECT `lap`.`ID`, `lap`.`qualificationTime`, `lap`.`userId` 
FROM `lap`
WHERE (lap.trackID =4)
AND (lap.raceDateTime >= "2013-07-25 10:00:00")
AND (lap.raceDateTime < "2013-08-04 23:59:59")
AND (isTestLap =0)
GROUP BY `userId`
ORDER BY `qualificationTime` ASC
LIMIT 10

架构:

CREATE TABLE IF NOT EXISTS `lap` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`userId` int(11) DEFAULT NULL,
`trackId` int(11) DEFAULT NULL,
`raceDateTime` datetime NOT NULL,
`qualificationTime` decimal(7,4) DEFAULT '0.0000',
`isTestLap` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`ID`)

(数据库创建脚本删除了不需要的列)

最佳答案

您正在使用 MySQL 的一项(错误)功能,称为隐藏列。正如其他人所指出的,您可以将不在 group by 中的列放入 select 语句中。但是,返回的值是任意的,甚至不能保证从一次运行到下一次运行都是相同的。

解决方案是找到每个用户的最大资格时间。然后将此信息连接回来以获取其他字段。这是一种方法:

select l.*
from (SELECT userId, min(qualificationtime) as minqf
FROM lap
WHERE (lap.trackID =4)
AND (lap.raceDateTime >= "2013-07-25 10:00:00")
AND (lap.raceDateTime < "2013-08-04 23:59:59")
AND (isTestLap =0)
GROUP BY `userId`
) lu join
lap l
on lu.minqf = l.qualificationtime
ORDER BY l.`qualificationTime` ASC
LIMIT 10

关于mysql - MySQL 的奇怪查询结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17878667/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com