如何通过从多个记录,每个记录,以获取最小日期(How to get minimum date by

2019-08-17 02:06发布

我想获得每一条记录的最小日期在具有一个主键日期的多次入境我的表。 看看我的表:

   CaseNo     Entry_date   
   ABC-001     2/12/13
   ABC-002     2/09/13
   ABC-001     1/01/13
   ABC-001     1/31/13
   ABC-002     1/01/13
   ABC-003     2/01/12
   ABC-003     2/18/13

我想有这样的结果:

       CaseNo     Entry_date    Min_date
       ABC-001     2/12/13      1/01/13
       ABC-002     2/09/13      1/09/13
       ABC-001     1/01/13      1/01/13
       ABC-001     1/31/13      1/01/13
       ABC-002     1/09/13      1/09/13 
       ABC-003     2/01/12      2/01/13
       ABC-003     2/18/13      2/01/13

我想记录在我的表中的每个CaseNo的最小日期。

我想这样的代码:

Select CaseNo,Entry_date, Min(Entry_date) as Min_date
from mytable group by CaseNo

结果是这样的:

   CaseNo     Entry_date    Min_date
   ABC-001     1/01/13      1/01/13
   ABC-002     1/09/13      1/09/13 
   ABC-003     2/01/12      2/01/13

代码中删除不具有最小日期的行。 我想与他们的最小日期为MIN_DATE显示所有记录。

Answer 1:

试试这个

SELECT
  CaseNo,
  Entry_date,
  (SELECT MIN(Entry_date) FROM Cases subc WHERE subc.CaseNo=c.CaseNo GROUP BY CaseNo) AS MinEntryDate
FROM Cases c


Answer 2:

不确定您正在使用的RDBMS,但两种方法浮现在脑海中。

JOIN对派生表

创建(派生表CaseNoMIN(Entry_date)的行,并加入,对你的主表:

    SELECT CaseNo, Entry_date, d.Min_date AS "Min_date"
      FROM tbl
INNER JOIN (  SELECT CaseNo, MIN(Entry_date) AS "Min_date"
                FROM tbl
            GROUP BY 1) d
        ON tbl.CaseNo = d.CaseNo;

使用分析(窗口)功能

如果您的RDBMS支持的话,你可以跳过派生表,并要求以最少的记录Entry_date通过CaseNo由系统提供:

SELECT CaseNo, Entry_date, MIN(Entry_date) OVER (PARTITION BY CaseNo) AS "Min_date"
  FROM tbl;


文章来源: How to get minimum date by each records from multiple records