2012-05-08 565 views
4

我知道這個問題已經有一些解決方案,但他們似乎並沒有爲我工作。如何從MySQL的每一天中選擇最後一條記錄

我想在每個用戶的數據庫中選擇每天的最後一條記錄。我有一個數據庫,按國家存儲用戶的位置,並將日期記錄到第二位。

我試圖運行SELECT查詢是:

SELECT MAX(date), id, country FROM dk_location_records WHERE userid = '10' 
AND (date > '2012-04-06 00:00:00' AND date < '2012-05-08 23:59:59') 
AND active = '1' GROUP BY DATE(date) ORDER BY date ASC 

然而,這是什麼實際上做的是讓我從每一天的最後日期,而不是正確地對應idcountry。它實際上獲得第一個idcountry,以及最後的date

我在做什麼錯?

幫助非常感謝!

感謝,

傑克

+0

能有幾個記錄給定用戶得到正確的結果? – Romain

+0

您是否可以確認您不希望每個用戶擁有大量記錄,而只需要每個用戶的最後一個記錄。基本上「用戶X最後在哪裏」。以下幾個答案似乎是誤解。 – Cylindric

+0

Devart的解決方案就是我所追求的。我希望每一天的最後一個條目對於任何給定的用戶。因此,對於ID爲10的用戶,我想知道自4月6日以來每天結束時的位置。謝謝。 –

回答

10

嘗試此查詢,從每一天顯示最後一個記錄,每個用戶 -

SELECT t1.* FROM dk_location_records t1 
    JOIN (SELECT DATE(date) date_date, userid, MAX(date) max_date 
     FROM dk_location_records 
     GROUP BY date_date, userid 
     ) t2 
    ON t1.date = t2.max_date AND t1.userid = t2.userid; 

...添加WHERE條件,如果你需要。

+0

感謝Devart,作品的魅力! –

0

我認爲你不應該由DATE(date)組。我認爲你應該按userid,country分組。就像這樣:

SELECT 
    MAX(date), userid, country 
FROM 
    dk_location_records 
WHERE 
    userid = '10' 
    AND (date > '2012-04-06 00:00:00' AND date < '2012-05-08 23:59:59') 
    AND active = '1' 
GROUP BY userid,country 
ORDER BY date ASC 
-1

你應該用相同的時間戳改變你的ORDER BY DESC來代替ASC

+0

這就是我最初的想法,不幸的是它沒有任何區別,同樣的問題依然存在。 –

相關問題