• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQLでうまいことビューが作れない)

SQLでビュー作成時の抽出条件について

このQ&Aのポイント
  • SQLサーバー2005+マネジメントスタジオを使用してビューを作成している際に、特定の条件でデータを抽出したい場合、T-SQLを使用して抽出条件を指定することができます。
  • 具体的には、明細IDの中で一番新しい日付のデータのみを抽出する場合、SELECT文を使用し、ORDER BY句とTOP句を組み合わせて抽出条件を指定します。
  • 上記の例では、明細IDが111のデータの中で一番新しい日付のデータのみを抽出しています。同様に、他の明細IDについても抽出条件を指定することができます。

質問者が選んだベストアンサー

  • ベストアンサー
  • rukuku
  • ベストアンサー率42% (401/933)
回答No.2

こんばんは ご質問の内容だけならば、データのあるテーブルを Table_1 とすれば、 SELECT 明細ID, MAX(日付) AS 日付 FROM dbo.Table_1 GROUP BY 明細ID で可能です。 そうでなくてTable_1の他のフィールドが必要なら以下のようにします。 方法は2段で、 まず、View_1を上記と同じように設定します。 SELECT 明細ID, MAX(日付) AS 日付 FROM dbo.Table_1 GROUP BY 明細ID 次にView_2を以下のように設定します。 SELECT dbo.Table_1.num, dbo.Table_1.明細ID, dbo.Table_1.日付, dbo.Table_1.データ1 FROM dbo.Table_1 INNER JOIN dbo.View_1 ON dbo.Table_1.明細ID = dbo.View_1.明細ID AND dbo.Table_1.日付 = dbo.View_1.日付 もしかしたら、こちらが参考になるかもしれません。 http://okwave.jp/qa/q6484067.html

tony77
質問者

お礼

ご回答ありがとうございました! できましたー

その他の回答 (1)

回答No.1

明細ID毎の最新日付を得たいだけなら、GROUP BYとMAX関数を使うだけです。 さらに、「明細ID毎の最新日付を持つ行の、他の列の値も得たいというなら、 SQL Server 2005であれば、Oracleでいう分析関数、標準SQLや他の主要RDBMSではウインドウ関数を使って 明細ID毎の最大日付を持つ行に、RANK()やROW_NUMBER()で番号を付けて、番号が1の行を得るといった方法が簡単です。 ウインドウ関数については、OVER()などのキーワードで調べれば、容易に使用方法を調べられます。

tony77
質問者

お礼

ご回答ありがとうございました! できましたー