2011-05-10 85 views
1

我有一個表,其中包含日誌,並具有以下方案:Sql語句的問題

USER | DATE | LOG 
x  x  x 
... 

現在,我要讓ONE查詢檢索每個(USER, DATE)對,其中DATE是最新的爲這個用戶。

我在思考着什麼樣(僞):

SELECT ... FROM (TABLE) ORDERED BY DATE, DISTINCT BY USER 

但我不知道這是要去工作。

是否正確DISTINCT會採取第一次可能日期在此查詢,因此產生所需的結果?或者DISTINCT查詢中元素的順序是不確定的?


如果是的話,我應該怎麼解決這個問題(這是我不能添加新表的情況下,如users,例如,緩存最新的日期還有)

回答

1

現在,我想打一個查詢 檢索每一個(USER,DATE)對,其中 日期是最新的這個 用戶。

select user, max(date) 
from yourtable 
group by user 

您可能要添加ORDER BY user

由於用戶日期是大多數SQL DBMS的保留字,因此更有可能運行。

select "user", max("date") 
from "yourtable" 
group by "user"; 
0

它自己的DISTINCT不會完全做你想做的,因爲你想要最大的日期PER USER,你需要做一個子查詢。查詢中的順序將確保您獲得最大日期。

SELECT DISTINCT USER 
     , DATE 
     , LOG 
     FROM TABLE AS T1 
    WHERE DATE = (SELECT TOP 1 DATE 
        FROM TABLE AS T2 
        WHERE T2.USER = T1.USER 
       ORDER BY DATE DESC) 
+0

對不起做到這一點,忘了我的子查詢做頂1。 – 2011-05-10 19:42:35

0

簡單的解決辦法是

select user, max(date) 
from tableName 
group by user 

這確實你問什麼 - 但如果你添加「日誌」的查詢,則需要使用子查詢。

1

如果你的數據庫支持窗口,你可以用

SELECT user, date, log FROM 
(SELECT user, date, log, row_number() 
    OVER (PARTITION BY user ORDER BY date DESC) AS rn) FROM table_name) AS subq 
WHERE rn=1;