0

テーブル内の各レコードの最小日付を、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

9

使用している RDBMS は不明ですが、2 つのアプローチが思い浮かびます。

派生テーブルに対する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;

分析 (ウィンドウ) 関数を使用する

RDBMS がサポートしている場合は、派生テーブルをスキップして、システムEntry_dateによって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 に答える