从 MySQL 数据库中按最低分数获取行

Fetching Rows By Minimum Scores From MySQL Database

我有一个数据库,可以按人记录高尔夫得分。每个人都有任意多的分数,因为高尔夫比赛没有硬性限制。

与每个人和分数一起,日期(存储为 Unix 时间但此处正常显示)和一些其他数据(如课程和天气)被记录。

我的问题如下: 1) 我只想要每个玩家最老的 "top" 分数。这意味着如果一名球员的最好成绩是 Par(无论球场如何)并且完成了 3 次,我只想要第一个。我的代码不处理这个,我不知道该怎么做。它输出玩家最好成绩的所有实例。

2) 我还希望能够从数据的特定子集中获取数据。示例:FROM golfdata WHERE Course = $course_name 或根据天气情况等。我的解决方案让我这样做两次。有没有办法不重复自己?

这是我能得到的最接近的结果:

SELECT a.*
FROM golfdata a
INNER JOIN (
SELECT Name, MIN(Score) Score
FROM golfdata b
GROUP BY Name) c 
    ON a.Name = c.Name AND a.Score = c.Score

如果我想按我使用的课程进行过滤:

(SELECT * FROM golfdata WHERE Course = $course_name) in place of "golfdata"

示例数据,现实中更多。

+--------+------------+-------+-------------+------+
| Name   | YYYY-MM-DD | Score | Location    | Wind |
+--------+------------+-------+-------------+------+
| Tom    | 2019-5-25  | 70    | Augusta     | Fast |
| Amanda | 2019-1-13  | 73    | Augusta     | Calm |
| David  | 2018-12-25 | 69    | Pine Valley | Slow |
| David  | 2018-9-15  | 72    | Oakmont     | Calm |
| David  | 2018-5-19  | 71    | Pine Valley | Slow |
| Tom    | 2018-8-11  | 70    | Oakmont     | Calm |
+--------+------------+-------+-------------+------+

预期输出:

+--------+------------+-------+-------------+------+
| Name   | YYYY-MM-DD | Score | Location    | Wind |
+--------+------------+-------+-------------+------+
| Amanda | 2019-1-13  | 73    | Augusta     | Calm |
| David  | 2018-12-25 | 69    | Pine Valley | Slow |
| Tom    | 2018-8-11  | 70    | Oakmont     | Calm |
+--------+------------+-------+-------------+------+

请注意,Tom 最老的 "best" 乐谱被选中,无论如何。

更多信息:如果有帮助的话,我正在使用 MySQL v5.7。

也许是这样的:

SELECT a.name,MIN(a.date) DATE,c.Score,a.Location,a.Wind 
  FROM golfdata a
  INNER JOIN 
  (SELECT NAME,MIN(score) score FROM golfdata b GROUP BY NAME) c
ON a.Name=c.Name AND a.Score=c.Score
GROUP BY a.NAME,c.score;

我在 select 中添加了 MIN(a.date) DATE 基本上是为了在分数相同时获得最小的日期。然后我在外部查询中添加了 GROUP BY a.NAME, c.score