
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で質問しましょう!
似たような質問が見つかりました
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- SQL Server ACCESSで3ファイルを結合して、表を作成するやり方を教えて下さい。 17 2022/08/15 20:34
- SQL Server ACCESSで複数テーブルを結合して、リストを作る方法を教えてください。 2 2022/08/12 19:32
- Access(アクセス) アクセス 削除するレコードを含んだテーブルを指定してくださいのエラー対処方法 1 2022/11/24 15:01
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- Oracle sqlで質問です。 idを元にidに紐付くデータで住所コードがjpのみのデータ以外のidを取得したい 4 2023/03/20 17:41
- その他(データベース) カラム上の重複を削除するクエリを教えてください 3 2022/04/12 14:11
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- その他(Microsoft Office) パワークエリの複数ファイルのデータ統合について 3 2022/07/14 17:06
- その他(データベース) accessでの請求管理について 2 2022/06/13 21:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
複数テーブルのGROUP BY の使い...
-
mysqlについて
-
フリーマーケット!
-
ローカルルーターモードとは
-
[SQLServer] テーブル名からカ...
-
MSDNselectしながらWHileでまわ...
-
テーブル名を省略して「h.id」...
-
製品の最安店舗を取りたい。
-
MySQLの抽出について
-
PL/SQLの変数について
-
Dell Latitude C600に合うメモ...
-
このSQL文の意味を教えてくださ...
-
SQLとC#connectについて
-
SQL Server を使っています。SQ...
-
SQL文で、一部一致した列だけ抽出
-
INSERT時の大小比較を含む重複...
-
カラム情報取得方法
-
SQLServerでのデータディクショ...
-
SQLについて質問します
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
エクセルの関数について教えて...
-
sqlで、600行あるテーブルを100...
-
select文のwhere句に配列を入れ...
-
SQLにて特定の文字を除いた検索...
-
WordpressのContact form 7でzi...
-
SQLサーバから、項目の属性(型...
-
VIEWの元のテーブルのindexって...
-
クエリ表示と、ADOで抽出したレ...
-
マイクラPC版のコマンドで効率...
-
【Transact-sql】 execの結果を...
-
SQL Left Join で重複を排除す...
-
エラー 1068 (42000): 複数の主...
-
[MySQL] UNIQUE制約の値を更新...
-
inner joinをすると数がおかし...
-
1テーブル&複数レコードの更新...
-
Access パラメータクエリをcsv...
-
期間の重複を調べるSQL文につい...
-
Unionした最後にGROUP BYを追加...
-
Updateの複数テーブル条件時のL...
おすすめ情報