[英]I want the last row of all players in a specific month+year
這是我的 2 個月 sql 表的簡化版本(按日期排序):
player_id | 日期 | 分數
1 2011-05-25 1200
2 2011-05-25 3400
3 2011-05-26 3200
4 2011-05-26 4400
1 2011-05-28 1000
2 2011-05-28 2000
3 2011-05-29 3000
4 2011-05-29 4000
1 2011-06-24 1300
2 2011-06-24 2500
3 2011-06-24 5000
4 2011-06-24 3000
基本上,我想要一個查詢,顯示特定月份/特定年份中所有玩家的最后得分。
例子:
如果我想要所有玩家在 05 月的最終得分,那么結果將是:
1 2011-05-28 1000
2 2011-05-28 2000
3 2011-05-29 3000
4 2011-05-29 4000
到目前為止我的 sql 查詢:
SELECT m1.* FROM table m1
LEFT JOIN table m2 ON (m1.player_id = m2.player_id AND m1.date < m2.date)
WHERE m2.date IS NULL
AND month(m1.date) = 05
AND year(m1.date) = 2011
ORDER BY score DESC);
這似乎沒有顯示所有玩家,只顯示05年后幾個月沒有玩的玩家。我在哪里添加日期選擇?
**編輯 John Nestoriak 的回答對我有用:)
我認為他指的是此處顯示的技術: 檢索每組中的最后一條記錄
加上他不想要最后一條記錄,而是給定月份的最后一條記錄的附加約束。
奇怪的是,您必須兩次提供額外的約束,一次是在連接條件中,一次是過濾結果。 這應該為你做。
SELECT m1.* FROM table m1
LEFT JOIN table m2 ON
(m1.player_id = m2.player_id AND m1.date < m2.date
AND m2.date < '2011-06-01')
WHERE m2.date IS NULL AND month(m1.date) = 5 AND year(m1.date) = 2011
假設Unique中的(player_id, date)
組合:
SELECT
t.*
FROM
TableX AS t
JOIN
( SELECT
player_id
, MAX(date) AS maxDate
FROM
TableX
WHERE
date BETWEEN '2011-05-01'
AND LAST_DAY('2011-05-01')
GROUP BY
player_id
) AS tg
ON
(tg.player_id, tg.maxDate) = (t.player_id, t.date)
ORDER BY
t.score DESC
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.