SQLの窓

2018年06月18日


MySQL で、Group by して合算された行内で最新データの明細を再び取り出す SQL

MySQL のドキュメントでは、『3.6.4 特定のカラムのグループごとの最大値が格納されている行』 として解説されていますが、それとは違ったアプローチで。( 全ての元の列を取り出します )

目的の SQL を実行する為に以下のようなテーブルを作成しました。

1) 同一取引先で、複数の日付で明細が存在します。
2) それぞれの行は code というユニークな主キーをもっています。
3) 取引先コードで group by すると、MySQL の拡張仕様で取得されるデータはどのような値になるか解りません
列名 型名 最大桁 NULL 主キー
1 code int N 1
2 取引日付 datetime
3 取引先コード varchar 4
4 明細 varchar 100
5 数量 int
set @@session.sql_mode='PIPES_AS_CONCAT' で連結を容易にできるようにします

日付を文字列として考えると、常に10桁で、その後にキーを結合しても max である事には変わりが無いので、インラインビューとしての結果を分割してキーを得ます。

そして、それに対して再び本体を結合させて全ての列データを取得します。
set @@session.sql_mode='PIPES_AS_CONCAT';
select
 * from
	(select
		最大日付とキー.取引先コード,
		substring_index(target, ',', -1) as key_data
		from
		(select
			取引先コード,max(取引日付||','||code) as target from
			一行伝票
			group by 取引先コード
		) 最大日付とキー
	) キーを取り出す

inner join 一行伝票

on key_data = code

order by キーを取り出す.取引先コード

取引先コード key_data code 取引日付 取引先コード 明細 数量
1 476 476 2005/8/17 1 この日が最新 14
2 997 997 2005/9/8 2 この日が最新 12
3 521 521 2005/9/8 3 この日が最新 9
4 820 820 2005/8/24 4 この日が最新 16



【MySQLの最新記事】
posted by lightbox at 2018-06-18 17:19 | MySQL | このブログの読者になる | 更新情報をチェックする
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり