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

How to get record with earliest date per group

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

        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

如有任何帮助,我们将不胜感激。

您可以采用多种不同的方法来解决这个问题,一种合理的方法如下:

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;

当然,您可以简单地使用自连接子查询(我将跳过那个例子)。