簡體   English   中英

用於選擇多行但每個 PK 的最高值的 SQL 查詢

[英]SQL Query for selecting multiple rows but highest value for each PK

我知道標題聽起來很可怕,但我不知道如何更好地總結它。 我很確定之前有人遇到過同樣的問題,但我找不到任何東西。 關系型數據庫:MySQL。

問題:我有以下(簡化)表:

+------+------------+---------------------------------+
| name | date       | score                           |
+------+------------+---------------------------------+
| A    | 01.01.2015 | 1                               |
| A    | 01.02.2015 | 3                               |
| A    | 01.03.2015 | 4                               |
| B    | 01.01.2015 | 3                               |
| B    | 01.02.2015 | 4                               |
| B    | 01.03.2015 | 5                               |
| C    | 01.01.2015 | 1                               |
| C    | 01.02.2015 | 2                               |
| C    | 01.03.2015 | 3                               |
+------+------------+---------------------------------+

沒有定義唯一約束或 PK。

該表代表游戲的最高分。 每天,所有玩家的得分都會插入以下值:姓名、分數、now()、...

這些數據代表了每個玩家在特定時間的得分快照。

我只想要每個用戶的最新條目,但只想要最高的 X 玩家。 所以結果應該是這樣的

+------+------------+---------------------------------+
| name | date       | score                           |
+------+------------+---------------------------------+
| A    | 01.03.2015 | 4                               |
| B    | 01.03.2015 | 5                               |
+------+------------+---------------------------------+
  • C 沒有出現,因為他不在前 2 名(按分數)
  • A 出現在最近的一行(按日期)
  • B 和 A 一樣出現在最近的一行(按日期),因為他在前 2 行

我希望我的意思很清楚。

提前致謝!

我知道你需要先選擇得分最高的X個球員,然后再獲得他們的最新表現。 在這種情況下,您應該這樣做:

SELECT * 
FROM tablename t
JOIN
(
  SELECT t.name, max(t.date) as max_date
  FROM tablename t
  JOIN
  (
    SELECT name 
    FROM
    (
      SELECT name, max(score) as max_score
      FROM table_name
      GROUP BY name
    ) all_highscores
    ORDER BY max_score DESC
    LIMIT X
  ) top_scores
  ON top_scores.name = t.name
  GROUP BY t.name
) top_last
on t.name = top_last.name
and t.date = top_last.date;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM