获取SQL查询中的最新日期

时间:2017-12-10 10:25:11

标签: sql sql-server greatest-n-per-group

我现在正在运行此查询:

WITH Result AS (

select distinct
    --pump.Product_PN,
    --pump.product_name,
    mot.Motor_pn,
    Mot.Motor_name,
    mas.STLAN AS Usage,
    po.DATUV as change_date,
    mot.[Procurement type],
    mot.Plant as plant, 
    po.IDNRK AS Component_PN,
    mak.MAKTG as component_name


FROM dbo.TBLMAST AS mas
INNER JOIN dbo.TBLSTPO AS po
    ON mas.STLNR = po.STLNR
INNER JOIN dbo.TBLMAKT AS mak 
    ON mak.MATNR = po.IDNRK


--INNER JOIN ['Pumps to motor$'] AS pump
    --ON pump.[Motor Product Number] = SUBSTRING(mas.MATNR, PATINDEX('%[^0 ]%', mas.MATNR + ' '), LEN(mas.MATNR))

INNER JOIN Grundfos_motors AS mot
    ON mot.Motor_PN = SUBSTRING(mas.MATNR, PATINDEX('%[^0 ]%', mas.MATNR + ' '), LEN(mas.MATNR))


where mas.STLAN = '8' and mot.Motor_PN = '78085617' and mak.MAKTG like '%stator%'

 )

 select motor_pn, motor_name, plant, change_date, Component_PN, Component_name, cast(getdate() as date) as Date_of_Extraction_date

 from result



 order by change_date DESC;

此查询的结果是:

Query 1

从此查询结果中,我想运行另一个查询,其中change_date设置为最新。所以我只想检索最新日期的数据,并排除休息。类似的东西:

Result

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

你应该可以这样做:

select motor_pn, motor_name, plant, change_date, Component_PN, Component_name,
       cast(getdate() as date) as Date_of_Extraction_date
from (select r.*,
             row_number() over (partition by motor_pn order by change_date desc) as seqnum
      from result r
     ) r
where seqnum = 1;