[英]Mysql Left outer join filter by
我正在嘗試從MySQL服務器中的數據提取排行榜。 這是為了顯示某些玩家在每張地圖上的圈速。
到目前為止,我目前提出的查詢是:
select d1.*
from surf_times d1
left outer join surf_times d2
on (d1.Name = d2.Name and d1.Time > d2.Time)
where d2.Name is null
order by Time;
這將返回正確的結果,但是我需要按地圖進行過濾。 可以在http://sqlfiddle.com/#!2/3e9c6/1上找到示例表。
該查詢將響應:
SteamID Name Map Time Date
76561197991519598 Kuratheris surf_utop 60.05 1445107360
76561198129490626 xXNightw0lfXx surf_ace 60.84 1445106920
76561198156238243 ☆ The Pic ☆ surf_utop 62.35 1445107724
76561198049179442 J4N412N3 surf_utop 69.53 1445107519
76561197994977992 Rockape2620 surf_ace 72.26 1445107047
這幾乎是正確的,但是我的查詢只需要返回選擇的地圖,而不是所有地圖的時間。 正確的查詢應以所選地圖的前15次響應,例如“ surf_utop”應以下表響應:
SteamID Name Map Time Date
76561197991519598 Kuratheris surf_utop 60.05 1445107360
76561198156238243 ☆ The Pic ☆ surf_utop 62.35 1445107724
76561198049179442 J4N412N3 surf_utop 69.53 1445107519
我看過其他問題,例如SQL僅選擇在列上具有最大值的行,但是無法弄清楚。
因此,只需將所選地圖添加到您的位置即可。
select d1.*
from surf_times d1
left outer join surf_times d2
on (d1.Name = d2.Name and d1.Time > d2.Time)
where d2.Name is null AND d1.map = 'surf_utop'
order by Time
limit 15;
結果:
+-------------------+-----------------+-----------+-------+------------+
| SteamID | Name | Map | Time | Date |
+-------------------+-----------------+-----------+-------+------------+
| 76561197991519598 | Kuratheris | surf_utop | 60.05 | 1445107360 |
| 76561198156238243 | ☆ The Pic ☆ | surf_utop | 62.35 | 1445107724 |
| 76561198049179442 | J4N412N3 | surf_utop | 69.53 | 1445107519 |
+-------------------+-----------------+-----------+-------+------------+
您無需再次JOIN
整個表,可以使用:
SELECT st.*
FROM surf_times st
WHERE st.Time =
(SELECT MIN(t.Time)
FROM surf_times t
WHERE t.SteamID = st.SteamID AND t.Map = st.Map)
AND st.Map = 'surf_utop' -- or any other map
GROUP BY st.SteamID
ORDER BY st.Time
LIMIT 15;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.