按ID分列的第二个最大日期

时间:2017-03-29 12:59:30

标签: sql

我有一张看起来像这样的表

ID          Date
123        2/1/2017
123        4/1/2017 
123        6/5/2017 
123        7/8/2017
456        3/8/2017
456        3/9/2017 
456        3/10/2017

日期采用美国格式。 我想提取一个ID列表,其中包含SECOND最大日期。所以我希望结果如下:

ID         Date
123       6/5/2017 
456       3/9/2017

我不知道该怎么做。我用Google搜索,但无济于事。非常感谢任何帮助。

我试过这个,但它无效

select *
from (
    select ROW_NUMBER() over (partition by ID order by DATE  desc ) as 'rowNum', ID, DATE
    from table1 ) withRowNum 
where rowNum = 2

1 个答案:

答案 0 :(得分:1)

对于SQL Server:

如果您的日期为varchar,并且您当前的日期格式不是mdy,那么您可以使用set dateformat,例如

set dateformat mdy;
select *
from (
    select ROW_NUMBER() over (
             partition by ID 
             order by convert(date,DATE)  desc
           ) as 'rowNum', ID, DATE
    from table1 ) withRowNum 
where rowNum = 2