- ベストアンサー
SQL Serverで特定の商品に関する最新の売上明細データを得意先ごとに取得する方法
- SQL Serverを使用しており、特定の商品に関して得意先ごとに最新の売上明細データを抽出する方法を知りたいです。
- 売上明細データには明細ID、得意先ID、商品ID、売上金額、売上日があります。
- 特定の商品に関して得意先ごとの最新のデータだけを抽出するために、tokuisaki_idとsyohin_idを指定してデータを抽出するSQL文を試しましたが、うまくいきません。どなたかご指導いただけないでしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#1です。訂正します。 SELECT t1.* FROM table_uri_meisai t1, (select tokuisaki_id, max(uriage_date) saisin FROM table_uri_meisai WHERE syohin_id = 1 GROUP BY tokuisaki_id) t2 WHERE t1.tokuisaki_id = t2.tokuisaki_id AND t1.syohin_id = 1 AND t1.uriage_date = t2.saisin ORDER BY t1.meisai_id 商品ID=1以外も欲しいなら、 SELECT t1.* FROM table_uri_meisai t1, (select tokuisaki_id, syohin_id, max(uriage_date) saisin FROM table_uri_meisai GROUP BY tokuisaki_id, syohin_id) t2 WHERE t1.tokuisaki_id = t2.tokuisaki_id AND t1.syohin_id = t2.syohin_id AND t1.uriage_date = t2.saisin ORDER BY t1.meisai_id (ORDER BY は適宜修正のこと)
その他の回答 (2)
- ichhabehunger
- ベストアンサー率55% (27/49)
t1とかt2について これらは「alias」と言って、長いテーブル(またはテーブルと同じ働きと考えられるもの)に 対する別名です。 他にも列名に対しても使えます。 例. select publish,max(price) as 最大値,min(price) as 最小値 from dbo.book group by publish このように使うと(上で「最大値」「最小値」が列に付けたaliasです) publish 最大値 最小値 1 インプレス 3129 2625 2 秀和システム 3360 2520 3 翔泳社 4179 2940 のように出力されます。 また、同じテーブルでも別扱いできます。このことによって 自分自身のテーブルとの結合ができます。
お礼
普通「as」をつけて使うエイリアスですね。 「as」を略して使うこともできるんですね。 丁寧に教えていただき、ありがとうございました。
- bin-chan
- ベストアンサー率33% (1403/4213)
Oracleだったらこんな感じ(無試験ですが) SELECT t1.* FROM table_uri_meisai t1, (select tokuisaki_id, max(uriage_date) saisin FROM table_uri_meisai WHERE syohin_id = 1 GROUP BY tokuisaki_id) t2 WHERE t1.tokuisaki_id = t2.tokuisaki_id AND t1.uriage_date = t2.saisin ORDER BY t1.meisai_id 商品IDを変更する場合は、t2の中を修正のこと。
お礼
ほんとに早い回答、ありがとうございました。 使っているのは MS SQL Server ですが、 教えていただいたとおりやってみたところできました。 本当にありがとうございます。 ところで、今後のこともあって教えてもらいたいのですが、 「t1」とか「t2」とはどんな意味があったり、役割があるんでしょうか。 まだ初心者なんですが、自習した中でも「t1」や「t2」にあたるものは 今まで見たことありませんでした。 ついでに教えて下さい。 よろしくお願いします。