プロが教える店舗&オフィスのセキュリティ対策術

SQLでのレコード抽出について、以下のテーブルよりレコード抽出するには、SQLをどのように組めば宜しいでしょうか?


テーブルA
   日付  取引番号 取引枝番
  20171001 111111  11111
  20171001 111112  11111
  20171001 111112  11112
  20171002 111112  11111
  20171003 111111  11111
  20171003 111112  11111
  20171003 111112  11112
  20171003 111112  11113

①「日付」で最大値を求める。(20171003)
②「日付」の最大値の中での4レコードで、今度は「取引番号」の最大値を求める。(111112)
③「取引番号」の最大値の中での3レコードで、今度は「取引枝番」の最大値を求める(11113)
④上記までの結果、最後の8レコード目が抽出される。

A 回答 (2件)

create table tbl_a(d int,no int,subno int);


insert into tbl_a values
(20171001,111111,11111),
(20171001,111112,11111),
(20171001,111112,11112),
(20171002,111112,11111),
(20171003,111111,11111),
(20171003,111112,11111),
(20171003,111112,11112),
(20171003,111112,11113);

(1)
select max(d) from tbl_a

(2)
select max(no) from tbl_a
where d=(select max(d) from tbl_a)

(3)
select max(subno) from tbl_a as t1
where (d,no) in (
select d,max(no) from tbl_a
group by d
)

(4)意味がわからない、こう?
select * from tbl_a
where d=(select max(d) from tbl_a)
and no=(select max(no) from tbl_a where d=(select max(d) from tbl_a))
and subno=(select max(subno) from tbl_a as t1 where (d,no) in (select d,max(no) from tbl_a group by d))
    • good
    • 0

えっと。

。。
ようは、、、
  「日付が最大」かつ「取引番号が最大」かつ「取引枝番が最大」のレコードを抽出する
というだけのことですよね。
これがわからないのはSQLをほぼ全くご存じないのだと思います。
であれば、まずはSQLの初歩を勉強してください。
教わってこの場は逃れてもすぐまた行き詰まるだけですので。

https://www.1keydata.com/jp/sql/
http://itpro.nikkeibp.co.jp/article/COLUMN/20061 …

ピンポイントで勉強したい場合はGoogleなどで「sql 最大値 条件」といった適当なキーワードで検索すると(1)~(3)の行い方を説明したページがたくさん見つかるはずですし、同様に「sql 複合条件」といった適当なキーワードで検索すると(4)の行い方を説明したページがたくさん見つかるはずです。

SQL文を書けばよいだけの問題であればそれで済むはずです。
実際に動かすのでしたら使用しているRDBのSQLもそれで問題無いか確認しましょう。方言が強いRDBもありますから。(^^;
あと、RDBへの接続手順とかも知らないといけないですね。

参考まで。
    • good
    • 0
この回答へのお礼

回答頂きありがとうございます。ご指摘の通り基本的な所も危ういので、記載のリンクで勉強させてもらいます。

お礼日時:2017/10/24 18:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!