2011-12-23 77 views
1

我有以下數據。SQL基於創建行的不同行

enter image description here

我需要對數據進行查詢,這樣我纔會得到以下記錄。

我需要基於DateApplication的唯一記錄。像下面一樣。

有人可以告訴我如何做到這一點請在SQL Server 2008中?

enter image description here

回答

2

你可以試試這個

SELECT Name, Email, DateApplication, Description 
FROM (SELECT ROW_NUMBER() OVER (PARTITION BY Name ORDER BY DateApplication DESC) RowNumber, 
       Name, Email, DateApplication, Description 
     FROM YourTableName) 
WHERE RowNumber = 1 

希望這有助於

+0

謝謝你,作品像魅力 – 2011-12-23 22:48:31

2
SELECT Name, email, MAX(DateApplication) As DateApplication, 
    (SELECT TOP 1 description 
    FROM tbl As tbl1 
    where tbl1.Email = tbl.Email AND tbl1.DateApplication = MAX(tbl.DateApplication)) 
) As description 
from tbl 
GROUP BY Name, email 
+1

這完全不是OP要找的。 「Description」怎麼樣?這就是併發症的來源。 – 2011-12-23 14:11:39

2

有對皮膚一隻貓的方法不止一種,但通常情況下,你有一個子查詢返回你對每個名字與它的最新日期和加入該回到你的原始表。

使用with語句

;WITH q AS (
    SELECT Name, DateApplication = MAX(DateApplication) 
    FROM YourData 
    GROUP BY 
      Name 
) 
SELECT Name 
     , Email 
     , DateApplication 
     , Description 
FROM YourTable yt 
     INNER JOIN q ON q.Name = yt.Name 
         AND q.DateApplication = yt.DateApplication 

使用一個INNER JOIN

SELECT Name 
     , Email 
     , DateApplication 
     , Description 
FROM YourTable yt 
     INNER JOIN (
      SELECT Name, DateApplication = MAX(DateApplication) 
      FROM YourData 
      GROUP BY 
        Name 
     ) q ON q.Name = yt.Name 
       AND q.DateApplication = yt.DateApplication 

注意,在每個例子中我假設組合Name, DateApplication是獨一無二的。

3

你可以利用row_number()功能在這裏:

select 
    name, 
    email, 
    dateapplication, 
    description 
from 
(
    select *, row_number() over (partition by email order by dateapplication desc) as row_num 
    from YourTable 
)a 
where row_num = 1 
1

假設你想要的最後一項,你可以像這樣做:

SELECT t1.Name, t1.Email, t1.DateApplication, t1.Description 
FROM tablename t1 
WHERE t1.DateApplication = 
     (SELECT MAX(t2.DateApplication) 
     FROM tablename t2 
     WHERE t2.Name = t1.Name AND t2.Email = t1.Email)