选择分组依据和最大日期

时间:2019-05-10 01:24:33

标签: sql-server

这可能是一个重复的问题,但我似乎无法弄清楚如何实施先前的建议。

重要的数据如下:

drawing    method       Location        thk_date
314C0010   UT       05.01       2016-05-24 
314C0010   UT       05.01       2011-10-26 
314C0010   UT       06.01       2016-05-24 
314C0010   UT       07.01       2016-05-24 

当我对位置05.01执行选择时,我只希望具有最新thk_Date的行

这是我的声明,它仅获取所有记录。

SELECT Distinct
   t.[Id]
  ,t.[SurveyNumber]
  ,t.[TPLATFORM]
  ,t.[DRAWING]
  ,r.[Desc]
  ,t.[METHOD]
  ,t.[LOCATION]
  ,t.[THK_DATE]
  ,t.[THICK]
  ,t.[MEAS_THK]
  ,t.[COMMENTS]
  ,t.[EXCLUDE]
  ,t.[PAINT]
  ,t.[CF1]
  ,t.[CF2]
  ,t.[CF3]
  ,t.[NF1]
  ,t.[NF2]
  ,t.[Year]
  ,t.[Completed]
  ,t.Created
  ,t.CreatedBy
  ,t.ModifiedBy
  ,t.Modified
  ,YEAR(THK_DATE)
  ,t.Inservice

FROM Thk t
left JOIN ref r ON r.[DRAWING] = t.[DRAWING]
left JOIN eng e ON e.[DRAWING] = t.[DRAWING]

WHERE t.SurveyNumber = @SurveyNumber 
AND t.[Year] = @Year

ORDER BY t.DRAWING, t.Method, t.[LOCATION], THK_DATE desc

如何仅获取具有max(thk_date)的行?我试图分组并选择前1名,但只获得一条记录。

1 个答案:

答案 0 :(得分:0)

您可以为此使用ROW_NUMBER()

由于您没有给出其他表的结构,因此这里是一个示例。

declare @Drawings as 
Table(drawing varchar(100), 
      method varchar(2), 
      Location varchar(10),
      thk_date DateTime)

INSERT INTO @Drawings
VALUES
('314C0010', 'UT','05.01','2016-05-24'), 
('314C0010', 'UT','05.01','2011-10-26'), 
('314C0010', 'UT','06.01','2016-05-24'), 
('314C0010', 'UT','07.01','2016-05-24') 


;WITH CTE AS
(
select row_number() over(partition by Location order by thk_date desc) as rn,*
from @Drawings
)

select * from CTE where rn=1

Fiddle here