SQL Server を使っています。SQLの質問です。
得意先テーブルと商品テーブルと売上明細テーブルがあります。
一つの商品に関して得意先ごとに最新の売上明細データの一覧を作成したいと考えて
います。
■売上明細データ
明細ID (meisai_id)
得意先ID (tokuisaki_id)
商品ID (syohin_id)
売上金額(uriage_kingaku)
売上日 (uriage_date)
■売上明細データ(table_uri_maisai)
meisai_id tokuisaki_id syohin_id uriage_kingaku uriage_date =================================================================
1 aaa 001 100 2010/01/01
2 aaa 002 200 2010/01/01
3 bbb 001 105 2010/01/02
4 bbb 002 205 2010/01/02
5 ccc 001 110 2010/01/03
6 ccc 002 210 2010/01/03
7 aaa 001 100 2010/01/04
8 aaa 002 200 2010/01/04
9 bbb 001 105 2010/01/05
10 bbb 002 205 2010/01/05
11 ccc 001 110 2010/01/06
12 ccc 002 210 2010/01/06
上のような明細があり、「syohin_id」が「001」のデータに関して、
得意先ごとの最新のデータだけを抽出したいと考えています。
この場合ですと、以下の3件のデータが抽出できればよいわけです。
7 aaa 001 100 2010/01/04
9 bbb 001 105 2010/01/05
11 ccc 001 110 2010/01/06
tokuisaki_id と syohin_id の2つを特定して1件のデータを抽出するには
以下のSQLで実現できましたが、syohin_id だけを指定して複数のデータを
出すことがどうしてもできません。
SELECT *
FROM
table_uri_meisai
WHERE uriage_date =
(select max(uriage_date)
FROM
table_uri_meisai
WHERE
tokuisaki_id = 1
AND
syohin_id = 1)
AND
tokuisaki_id = 1
AND
syohin_id = 1
どなたかご指導ください。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
#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 は適宜修正のこと)
ほんとに早い回答、ありがとうございました。
使っているのは MS SQL Server ですが、
教えていただいたとおりやってみたところできました。
本当にありがとうございます。
ところで、今後のこともあって教えてもらいたいのですが、
「t1」とか「t2」とはどんな意味があったり、役割があるんでしょうか。
まだ初心者なんですが、自習した中でも「t1」や「t2」にあたるものは
今まで見たことありませんでした。
ついでに教えて下さい。
よろしくお願いします。
No.3
- 回答日時:
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」を略して使うこともできるんですね。
丁寧に教えていただき、ありがとうございました。
No.1
- 回答日時:
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の中を修正のこと。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
エクセルの関数について教えて...
-
”photo id” とは何ぞや?
-
SQLサーバから、項目の属性(型...
-
マイクラPC版のコマンドで効率...
-
sqlで、600行あるテーブルを100...
-
SQLの検索について
-
ファミマTカード会員番号
-
阪急三番街 ATM(ゆうちょ)は...
-
Access パラメータクエリをcsv...
-
inner joinをすると数がおかし...
-
カンマ区切りの文字列を検索する
-
#1136 - Column count doesn't ...
-
tinyint(1) についての質問です。
-
LEFT JOIN とRIGHT JOINの合体...
-
フィールド名を変数で指定するには
-
SQL Left Join で重複を排除す...
-
Yahoo .comの idには年齢制限、...
-
上位3位を求めるSQL文は?
-
副問合せの書き方について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
エクセルの関数について教えて...
-
VIEWの元のテーブルのindexって...
-
副問合せの書き方について
-
select文のwhere句に配列を入れ...
-
マイクラPC版のコマンドで効率...
-
SQLサーバから、項目の属性(型...
-
エラー 1068 (42000): 複数の主...
-
[MySQL] 3つのテーブルの結合で...
-
Access パラメータクエリをcsv...
-
SQLにて特定の文字を除いた検索...
-
SQL Left Join で重複を排除す...
-
ストアドのエラーについて
-
Unionした最後にGROUP BYを追加...
-
バインド変数について
-
PL/SQLの変数について
-
sqlで、600行あるテーブルを100...
-
WordpressのContact form 7でzi...
-
selectした大量データをinsert...
-
inner joinをすると数がおかし...
おすすめ情報