查询以获取每条记录的最短日期

时间:2013-04-25 06:48:23

标签: sql sql-server select

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

您可以使用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

相关问题