2

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

   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

2

您可以使用 CTE 或子查询来解决它。CTE 具有更好的性能。

子查询版本

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

CTE版

WITH CasesMinEntryDate(CaseNo, MinEntryDate) AS 
(
  SELECT CaseNo, MIN(Entry_date) FROM Cases GROUP BY CaseNo
)
SELECT
  c.CaseNo,
  Entry_date,
  MinEntryDate
FROM Cases c
INNER JOIN CasesMinEntryDate cmed ON c.CaseNo=cmed.CaseNo;

http://sqlfiddle.com/#!3/0feee/8

于 2013-04-25T09:58:08.587 回答
1
Select a.Case_No,
       a.Entry_date, 
       Min(b.Entry_date) as Min_date 
from   mytable a, 
       mytable b
where  a.case_no = b.case_no
group by a.Case_No, a.entry_date
order by a.entry_date

http://sqlfiddle.com/#!2/fe6bd/2

于 2013-04-25T09:12:21.220 回答