2016-06-18 1 views
0

は、ここでは、この表から、私のテーブルのテーブル構造SQL Serverは -

id | Name   | Date   | VersionID 
----+---------------+---------------+------------------------------------- 
1 | Item 1  | 10/15/2012 | F8883CA4-3603-476D-BA33-1BBB6B87A79F 
1 | Item 1  | 11/06/2012 | AA22DA27-87D1-42EC-96F6-A4846A45DF6B 
1 | Item 1  | 11/06/2018 | AA22DA27-87D1-42EC-96F6-A4846A45DF6B 
2 | Item 2  | 11/06/2015 | F8883CA4-3603-476D-BA33-1BBB6B87A79F 
2 | Item 2  | 12/15/2012 | AA22DA27-87D1-42EC-96F6-A4846A45DF6B 
2 | Item 2  | 1/19/2013  | F8883CA4-3603-476D-BA33-1BBB6B87A79F 

ある列にMAX()値の1行を選択して、各バージョンのために、私は最大の日付で各項目を取得したいと思います。

id | Name   | Date   | VersionID 
----+---------------+---------------+------------------------------------- 
1 | Item 1  | 10/15/2012 | F8883CA4-3603-476D-BA33-1BBB6B87A79F 
1 | Item 1  | 11/06/2018 | AA22DA27-87D1-42EC-96F6-A4846A45DF6B 
2 | Item 2  | 11/06/2015 | F8883CA4-3603-476D-BA33-1BBB6B87A79F 
2 | Item 2  | 12/15/2012 | AA22DA27-87D1-42EC-96F6-A4846A45DF6B 

例Iは、rankdense_rank機能を試みたが、私は試したロジックは、期待される結果を返していません。思考?

+0

は、あなたはあなたがしようとした言う私たちに示していることはできますか? – Mihai

答えて

3

通常の方法はrow_numberを使用することです:

select id, name, date, versionid 
from (select s.*, 
      row_number() over (partition by id, version_id order by date desc) as seqnum 
     from structure s 
    ) s 
where seqnum = 1; 
0

我々はMAX条件と共に関連する副問合せを使用して結果を取得することができますまた、

DECLARE @Table1 TABLE 
    (id int, Name varchar(6), Date datetime, VersionID varchar(36)) 
; 

INSERT INTO @Table1 
    (id, Name, Date, VersionID) 
VALUES 
    (1, 'Item 1', '2012-10-15 05:30:00', 'F8883CA4-3603-476D-BA33-1BBB6B87A79F'), 
    (1, 'Item 1', '2012-11-06 05:30:00', 'AA22DA27-87D1-42EC-96F6-A4846A45DF6B'), 
    (1, 'Item 1', '2018-11-06 05:30:00', 'AA22DA27-87D1-42EC-96F6-A4846A45DF6B'), 
    (2, 'Item 2', '2015-11-06 05:30:00', 'F8883CA4-3603-476D-BA33-1BBB6B87A79F'), 
    (2, 'Item 2', '2012-12-15 05:30:00', 'AA22DA27-87D1-42EC-96F6-A4846A45DF6B'), 
    (2, 'Item 2', '2013-01-19 05:30:00', 'F8883CA4-3603-476D-BA33-1BBB6B87A79F') 
; 

Select T.id,T.Name,TT.Dt,T.VersionID from @Table1 T 
INNER JOIN (
select id,Name,MAX(Date)Dt,VersionID from @Table1 
GROUP BY id,Name,VersionID)TT 
ON T.id = TT.id AND T.Date = TT.Dt