如何获取每组最早日期的记录
Posted
技术标签:
【中文标题】如何获取每组最早日期的记录【英文标题】:How to get record with earliest date per group 【发布时间】:2015-12-10 23:20:25 【问题描述】:我需要根据“ItemNo”列从下表中获取最早日期。
项目编号 PO_number 日期 110913 PO-8048 2015 年 9 月 15 日 110913 PO-8036 2015 年 9 月 30 日 110652 PO-1011 2015 年 10 月 19 日 110652 PO-1011 2015 年 10 月 10 日 110009 PO-1016 2015 年 7 月 1 日 110009 PO-1087 2015 年 6 月 20 日 110888 PO-7171 2015 年 4 月 1 日您的查询结果应该是这样的。
项目编号 PO_number 日期 110913 PO-8048 2015 年 9 月 15 日 110652 PO-1011 2015 年 10 月 10 日 110009 PO-1087 2015 年 6 月 20 日 110888 PO-7171 2015 年 4 月 1 日任何帮助将不胜感激。
【问题讨论】:
您能告诉我们您使用的是什么查询吗? 如果日期列的数据类型为日期,您可以选择....按日期列名排序 【参考方案1】:您可以采用几种不同的方法来解决这个问题,一种合理的方法是:
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;
当然,您可以简单地使用自连接子查询(我将跳过那个示例)。
【讨论】:
@Allen_Delon,乐于助人。如果这有助于解决您的问题,请将其标记为问题的答案。谢谢。 @Allen_Delon 见这里:meta.stackexchange.com/questions/5234/…以上是关于如何获取每组最早日期的记录的主要内容,如果未能解决你的问题,请参考以下文章