如何获得每组最早日期的记录
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;
当然,您可以简单地使用自连接子查询(我将跳过那个例子)。
我需要根据列 '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;
当然,您可以简单地使用自连接子查询(我将跳过那个例子)。