0

我想获得我的表中每条记录的最小日期,其中包含一个主键的多个日期条目。看看我的表:

   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 的记录。

4

2 回答 2

9

不确定您使用的是什么 RDBMS,但我想到了两种方法。

对派生表 JOIN

创建 ( CaseNo, MIN(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;

使用分析(窗口)函数

Entry_date如果您的 RDBMS 支持它,您可以跳过派生表并以系统提供的最小值询问您的记录CaseNo

SELECT CaseNo, Entry_date, MIN(Entry_date) OVER (PARTITION BY CaseNo) AS "Min_date"
  FROM tbl;
于 2013-02-20T05:37:20.037 回答
2

试试这个

SELECT
  CaseNo,
  Entry_date,
  (SELECT MIN(Entry_date) FROM Cases subc WHERE subc.CaseNo=c.CaseNo GROUP BY CaseNo) AS MinEntryDate
FROM Cases c
于 2013-08-28T03:13:15.957 回答