2

1 つの主キーを持つ複数の日付エントリを持つテーブル内の各レコードの最小日付を取得したいと考えています。私のテーブルを見てください:

   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 に答える