您需要自己加入表格才能獲取所需的記錄。 對於這個答案我創建你的表時沒有外鍵,因爲它們不需要讓它工作。
CREATE TABLE Rankings (
id int IDENTITY NOT NULL,
user_id INT NOT NULL,
game_poule_id INT NOT NULL,
rank INT NOT NULL,
insertDate DATETIME NOT NULL
);
插入一些示例數據。沒有更多的信息,我無法模擬比這更好的任何信息。
INSERT Rankings(user_id,game_poule_id,rank,insertDate)
VALUES(1, 100, 3, CURRENT_TIMESTAMP-2)
INSERT Rankings(user_id,game_poule_id,rank,insertDate)
VALUES(1, 100, 2, CURRENT_TIMESTAMP-1)
INSERT Rankings(user_id,game_poule_id,rank,insertDate)
VALUES(1, 101, 6, CURRENT_TIMESTAMP)
INSERT Rankings(user_id,game_poule_id,rank,insertDate)
VALUES(2, 100, 5, CURRENT_TIMESTAMP-2)
INSERT Rankings(user_id,game_poule_id,rank,insertDate)
VALUES(2, 100, 1, CURRENT_TIMESTAMP-1)
INSERT Rankings(user_id,game_poule_id,rank,insertDate)
VALUES(2, 101, 2, CURRENT_TIMESTAMP)
查詢過去,但一個等級
SELECT Rankings.game_poule_id, Rankings.user_id, rank, MAX(Rankings.insertDate)
FROM Rankings INNER JOIN
(SELECT game_poule_id, user_id, MAX(insertDate) max_insert_date
FROM rankings
GROUP BY game_poule_id, user_id) Max_Ranking_Date
ON Rankings.user_id = Max_Ranking_Date.user_id
AND Rankings.insertDate < Max_Ranking_Date.max_insert_date
AND Rankings.game_poule_id = Max_Ranking_Date.game_poule_id
GROUP BY Rankings.game_poule_id, Rankings.user_id, rank
請注意! 正如您從結果中可以看到的,您不會爲每個用戶只有一行的遊戲獲得排名。但是因爲你要求的是「最後一個」,這對於有多個條目的遊戲纔有意義。
編輯: 我剛剛意識到我提供的查詢不會爲每個用戶每場比賽返回一行。任何人都想解決它?我得與一些工作:)
請郵寄到現在爲止您編寫的代碼。人們通常不喜歡只爲你寫代碼。 – 2010-05-05 08:58:03
我現在有一個GROUP BY子句 SELECT user_id,rank FROM排名WHERE FK_gamePoule =? GROUP BY USER_ID 但下一步是比較困難的:-) – Derk 2010-05-05 09:01:09