2011-08-04 5 views
2

次のような表がある場合、そのシリアル番号とそのcontract_typeとそれ以降の有効期限を選択するにはどうすればよいですか?それはこのクエリ簡単になり場合有効期限が後である選択行

 
serial_number  contract_type   expiry_date 
abc001     SPRT    2011-05-31 00:00:00 
abc001     HOMD    2013-05-31 00:00:00 
abc002     SPRT    2012-10-14 00:00:00 
abc002     HOMD    2011-10-14 00:00:00 
abc003     SPRT    2014-05-31 00:00:00 
abc003     HOMD    2011-05-31 00:00:00 
................ 

1)私は仮定を作ることができます。各シリアル値(SN)は、テーブルに2つ、2つだけcontract_typesを持つことになります。

2)実際の状況:SNとcontract_typeがプライマリキーで、contract_type 'SPRT'と 'HOMD'のみを探しています。

私が必要とする最終的な結果セットは次のようになりますのみ 'SPRT' または 'HOMD' contract_type

    • SN SNが 'SPRT' と 'HOMD' の両方を持っている場合、私は必要(有効期限が同じで、1つだけを選択した場合)

    誰でもクエリを出すことができますか?実際のケースは1つのクエリでは複雑すぎるかもしれませんが、最初の単純化されたケースではどうでしょうか。

  • +1

    私はここで何かが不足している可能性がありますが、あなたはexpiry_dateと何を比較していますか?あなたは「後でexpiry_date」と言っています。 –

    +0

    SNに「SPRT」と「HOMD」の両方がある場合は、SNのレコードが期限切れになっている必要があります。あなたの素早い応答のために他のレコード – user268451

    答えて

    1
    SELECT t.serial_number, t.contract_type, t.expiry_date 
        FROM YourTable t 
         INNER JOIN (SELECT serial_number, MAX(expiry_date) AS MaxDate 
             FROM YourTable 
             WHERE contract_type IN ('SPRT', 'HOMD') 
             GROUP BY serial_number) q 
          ON t.serial_number = q.serial_number 
           AND t.expiry_date = q.MaxDate 
        WHERE t.contract_type IN ('SPRT', 'HOMD') 
    
    +0

    よろしくお願いします。 SURとそのcontract_typeの両方が最終結果セットに表示されます。私はちょうど私の質問を編集した – user268451

    関連する問題