如何获得每组最早的日期记录

时间:2015-09-14 20:43:08

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

我需要根据列'ItemNo'从下表中获取最早的日期。

        ItemNo  PO_number  Date
        110913  PO-8048    9/15/2015
        110913  PO-8036    9/30/2015
        110652  PO-1011    10/19/2015
        110652  PO-1011    10/10/2015
        110009  PO-1016    7/1/2015
        110009  PO-1087    6/20/2015
        110888  PO-7171    4/1/2015

您的查询结果应如下所示。

        ItemNo  PO_number  Date
        110913  PO-8048    9/15/2015
        110652  PO-1011    10/10/2015
        110009  PO-1087    6/20/2015
        110888  PO-7171    4/1/2015

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

你可以通过几种不同的方式来解决这个问题,一种合理的方法就是:

with min_rec as
(
    select  t.ItemNo, t.PO_number, t.Date, row_number() over(partition by t.ItemNo order by t.Date asc) as rn
    from    your_table t
)
select   m.ItemNo, m.PO_number, m.Date
from     min_rec m
where    m.rn = 1;

利用CROSS APPLY将是另一种方法也可行,但在这种特殊情况下,它可能不会是一种表现更好的方法(尽管一如既往地取决于它):

select  distinct c.ItemNo, c.PO_number, c.Date
from    your_table t
cross apply (
    select top 1 i.ItemNo, i.PO_number, i.Date
    from   your_table i
    where  i.ItemNo = t.ItemNo
    order by i.Date asc) c;

当然,你可以简单地使用一个自加式子查询(我将跳过那个例子)。