MySQL选择不同的记录

MySQL选择不同的记录,mysql,sql,Mysql,Sql,我试图编写一个查询,从值列表中提取“最佳”记录: SELECT s.swimmerName, r.resultTimeText, r.resultAgeGroup, r.resultEventID, v.venueName FROM tblResults r JOIN tblEvents e ON e.eventID = r.resultEventID JOIN tblSwimmers s ON r.resultSwimmerID = s.swimmerID JOIN tblVenue

我试图编写一个查询,从值列表中提取“最佳”记录:

SELECT s.swimmerName, r.resultTimeText, r.resultAgeGroup, r.resultEventID, v.venueName     
FROM tblResults r
JOIN tblEvents e ON e.eventID = r.resultEventID
JOIN tblSwimmers s ON r.resultSwimmerID = s.swimmerID
JOIN tblVenues v ON e.resultVenueID = v.venueID
WHERE s.swimmerGender = %s
AND r.resultStroke = %s
GROUP BY s.swimmerName

这会选择我的所有记录,但人们会以不同的时间列出两次(这是我所知道的不同记录的结果)。为每个人选择最佳时间的最佳方式是什么?

您可以使用mysql的古怪分组来帮助您:

SELECT * FROM (
  SELECT s.swimmerName, r.resultTimeText, r.resultAgeGroup, r.resultEventID, v.venueName     
  FROM tblResults r
  JOIN tblEvents e ON e.eventID = r.resultEventID
  JOIN tblSwimmers s ON r.resultSwimmerID = s.swimmerID
  JOIN tblVenues v ON e.resultVenueID = v.venueID
  WHERE s.swimmerGender = %s
  AND r.resultStroke = %s
  ORDER BY 2) x
GROUP BY swimmerName
ORDER BY 2

这是通过首先将数据从最快到最慢排序,然后按名称分组来实现的。在myswl(仅限)中,并非所有非聚合列的分组都具有仅过滤按列分组的每个唯一组合遇到的第一行的效果。

尝试此操作。时间以什么格式存储?可以在时间字段上使用max()。看,时间是以文本形式存储的,我曾尝试将它们作为数字,但它们的格式是MM:SS.HHLol。我的意思是min(),因为这里看起来越少越好,这给了我“groupstatement”中的“Unknown column's.swimername”。这是噩梦卫士的问题吗?啊,非常感谢!它现在运行正常,但按字母顺序而不是按时间顺序。我猜2的顺序是指r.ResultItemText?是的。它是什么格式的?你能提供一些样品吗?(别担心…我们会让它工作的!)时间文本是一个文本字段,格式为MM:SS.HH(即01:23.54)我在这里有一个屏幕截图(很抱歉,必须空白名称、子项和所有这些…),除了有坏数据(缺少前导零,例如“44.31”(您应该通过更新数据来修复)它应该是有效的,因为字母顺序应该与时间顺序相同。关键是每个值中的位数总是相同的。什么不起作用?