我與SQL Server 2008.i工作有一個表包含以下幾列,如何根據最大日期獲取不同記錄?
Id,
Name,
Date
此表包含相同id.i多個記錄想得到具有最大date.how不同的ID可以我寫這個sql查詢?
我與SQL Server 2008.i工作有一個表包含以下幾列,如何根據最大日期獲取不同記錄?
Id,
Name,
Date
此表包含相同id.i多個記錄想得到具有最大date.how不同的ID可以我寫這個sql查詢?
使用ROW_ NUMBER() function和PARTITION BY子句。事情是這樣的:
SELECT Id, Name, Date FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY Id ORDER BY Date desc) AS ROWNUM
FROM [MyTable]
) x WHERE ROWNUM = 1
我得到了確切的結果謝謝.. – user2514925
的一種方法,使用ROW_NUMBER
:
With CTE As
(
SELECT Id, Name, Date, Rn = Row_Number() Over (Partition By Id
Order By Date DESC)
FROM dbo.TableName
)
SELECT Id --, Name, Date
FROM CTE
WHERE Rn = 1
如果多個MAX-日期是可能的,你想你可以使用DENSE_RANK
代替。
下面的SQL服務器的排名功能的概述:http://technet.microsoft.com/en-us/library/ms189798.aspx
順便說一句,CTE
是common-table-expression它類似於一個叫子查詢。我使用它可以通過row_number
進行過濾。這種方法允許選擇所有列,如果你想。
嘗試用Max(Date)
和GROUP BY
另兩列(那些具有重複數據)..
SELECT ID, Max(Date) as date, Name
FROM YourTable
GROUP BY ID, Name
您可以使用此
DECLARE @T TABLE(ID INT, NAME VARCHAR(50),DATE DATETIME)
INSERT INTO @T VALUES(1,'A','2014-04-20'),(1,'A','2014-04-28')
,(2,'A2','2014-04-22'),(2,'A2','2014-04-24')
,(3,'A3','2014-04-20'),(3,'A3','2014-04-28')
,(4,'A4','2014-04-28'),(4,'A4','2014-04-28')
,(5,'A5','2014-04-28'),(5,'A5','2014-04-28')
SELECT T.ID FROM @T T
WHERE T.DATE=(SELECT MAX(A.DATE)
FROM @T A
WHERE A.ID=T.ID
GROUP BY A.ID)
GROUP BY T.ID
嘗試,如果你只需要不需要ID
柱等欄目,那麼你並不需要去與ROW_NUMBER
或MAX
或任何其他。您只需在ID
列上執行Group By
列,因爲無論最大日期是多少,您都會得到相同的ID。
SELECT ID FROM table GROUP BY ID
--OR
SELECT DISTINCT ID FROM table
如果您需要ID
和Date
列最大日期,然後簡單地做一個Group By
上ID
列,並選擇Max
日期。
SELECT ID, Max(Date) AS Date
FROM table
GROUP BY ID
如果您需要所有的列,但只有一行有最大值。日期那麼你可以去ROW_NUMBER
或MAX
如其他答案中所述。
SELECT *
FROM table AS M
WHERE Exists(
SELECT 1
FROM table
WHERE ID = M.ID
HAVING M.Date = Max(Date)
)
select id, max(date) from NameOfYourTable group by id;
首先讓我們瞭解您已經嘗試請。 –