2015-01-06 24 views

回答

2

使用Window Function

SELECT Id, 
     Date, 
     Msg 
FROM (SELECT *, 
       Row_number()OVER (partition BY Id ORDER BY [Date] DESC) rn 
     FROM tablename) a 
WHERE rn = 1 

另一種方法是找到subquery然後join與主表中的結果每Id最大date。嘗試這個。

SELECT Id, 
     Date, 
     Msg 
FROM tablename a 
     JOIN (SELECT Id, 
        Max([Date])[Date] 
      FROM tablename 
      GROUP BY Id) B 
     ON a.Id = b.id 
      AND a.[Date] = b.[Date] 
+0

這會返回顯着減少的行數。我需要與Msg列一樣的行數。我需要的是Id和Max Date和Msg對最大日期。意味着行數應該是相同的,即使我從Select和Group By列表中刪除Msg – InTheWorldOfCodingApplications

+0

@InTheWorldOfCodingApplications - 兩個查詢都按預期工作。請查看http://www.sqlfiddle.com/#!3/51e0a/1和http://www.sqlfiddle.com/#!3/51e0a/5 –

0

簡單的方式獲得在where子句

下面是簡單的例子查詢最多日期排;

SELECT * FROM TABLE T1 
WHERE T1.TIME = (SELECT MAX(TIME) FROM TABLE WHERE ID = T1.ID)