【问题标题】:How to get distinct rows by id and earliest start date?如何按 id 和最早开始日期获取不同的行?
【发布时间】:2015-07-08 17:56:27
【问题描述】:

如何按 id 对行进行分组,并仅选择按开始日期 asc 排序的最早开始日期的行 -- group by 和 order by?

样本数据:

id;start_date;description;status;web_enabled;decision
31147020;2014-05-24 00:00:00.000;Description 1;Planning;1; 
31147020;2014-06-14 00:00:00.000;Description 1;Planning;1; 
31147023;2014-04-05 00:00:00.000;Description 2;Planning;1; 
31147023;2014-05-09 00:00:00.000;Description 2;Planning;1; 
31147023;2014-05-10 00:00:00.000;Description 2;Planning;1; 
31147023;2014-05-17 00:00:00.000;Description 2;Planning;1; 
31147101;2013-02-11 00:00:00.000;Description 3;Planning;1; 
31147101;2013-02-13 00:00:00.000;Description 3;Planning;1; 
31147101;2013-02-17 00:00:00.000;Description 3;Planning;1; 
31147101;2013-02-18 00:00:00.000;Description 3;Planning;1; 
31147101;2013-02-20 00:00:00.000;Description 3;Planning;1; 
31147101;2015-02-21 00:00:00.000;Description 3;Registration;1; 
31147108;2014-04-01 00:00:00.000;Description 4;Registration;1; 
31147108;2014-05-16 00:00:00.000;Description 4;Registration;1; 
31147113;2014-02-19 00:00:00.000;Description 5;Registration;1; 
31147113;2014-02-25 00:00:00.000;Description 5;Registration;1; 
31147113;2014-02-27 00:00:00.000;Description 5;Registration;1; 
31147113;2014-05-14 00:00:00.000;Description 5;Registration;1; 
31147113;2014-05-22 00:00:00.000;Description 5;Registration;1; 
31147113;2014-05-27 00:00:00.000;Description 5;Registration;1; 
31147113;2014-08-27 00:00:00.000;Description 5;Registration;1; 
31147113;2014-09-04 00:00:00.000;Description 5;Registration;1; 
31147113;2014-09-09 00:00:00.000;Description 5;Registration;1; 
31147113;2014-11-19 00:00:00.000;Description 5;Registration;1; 

想要的结果:

31147020;2014-05-24 00:00:00.000;Description 1;Planning;1; 
31147023;2014-04-05 00:00:00.000;Description 2;Planning;1; 
31147101;2013-02-11 00:00:00.000;Description 3;Planning;1; 
31147108;2014-04-01 00:00:00.000;Description 4;Registration;1; 
31147113;2014-02-19 00:00:00.000;Description 5;Registration;1; 

【问题讨论】:

标签: sql sql-server


【解决方案1】:

您可以使用 ROW_NUMBER 来标识第一个元素。您将按 id 进行分区,然后按 start_date 排序,以便由最早的 start_date 确定的每个 id 的第一次出现将具有1,因此在外部查询中您可以过滤以仅显示 ROW_NUMBER 为 1 的位置。

SELECT *
FROM (
    SELECT *,
        ROW_NUMBER() OVER (PARTITION BY id ORDER BY start_date) AS RowNum
    FROM [SourceTable]
    ) T
WHERE RowNum = 1

【讨论】:

  • @pkosel 如果答案对您有所帮助,请考虑单击答案旁边的向上箭头。如果答案解决了您的问题,请单击向下箭头下方的复选标记。这些事情可以帮助其他人知道您的问题已解决以及哪些答案有所帮助,您的声誉也会提高。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-09
  • 2021-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-01
  • 1970-01-01
相关资源
最近更新 更多