2

我與SQL Server 2008.i工作有一個表包含以下幾列,如何根據最大日期獲取不同記錄?

Id, 
    Name, 
    Date 

此表包含相同id.i多個記錄想得到具有最大date.how不同的ID可以我寫這個sql查詢?

+3

首先讓我們瞭解您已經嘗試請。 –

回答

5

使用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 
+0

我得到了確切的結果謝謝.. – user2514925

1

的一種方法,使用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

順便說一句,CTEcommon-table-expression它類似於一個叫子查詢。我使用它可以通過row_number進行過濾。這種方法允許選擇所有列,如果你想。

0

嘗試用Max(Date)GROUP BY另兩列(那些具有重複數據)..

SELECT ID, Max(Date) as date, Name 
FROM YourTable 
GROUP BY ID, Name 
0

您可以使用此

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 
0

嘗試,如果你只需要不需要ID柱等欄目,那麼你並不需要去與ROW_NUMBERMAX或任何其他。您只需在ID列上執行Group By列,因爲無論最大日期是多少,您都會得到相同的ID。

SELECT ID FROM table GROUP BY ID 
--OR 
SELECT DISTINCT ID FROM table 

如果您需要IDDate列最大日期,然後簡單地做一個Group ByID列,並選擇Max日期。

SELECT ID, Max(Date) AS Date 
FROM table 
GROUP BY ID 

如果您需要所有的列,但只有一行有最大值。日期那麼你可以去ROW_NUMBERMAX如其他答案中所述。

SELECT * 
FROM table AS M 
WHERE Exists(
     SELECT 1 
     FROM table 
     WHERE ID = M.ID 
     HAVING M.Date = Max(Date) 
     ) 
0
select id, max(date) from NameOfYourTable group by id; 
相關問題