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

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/…

以上是关于如何获取每组最早日期的记录的主要内容,如果未能解决你的问题,请参考以下文章

如何在我的输入的每一行中获取最早日期和最早日期之间的天数

sql查询获取最早日期

如何在 SQL 中获取每组的最后一条记录

如何返回最早日期的记录?

SQL Server如何优化获取具有最大值的相关记录的查询

MySQL获取每天的最早记录