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の最新記事】
- MySQL に PIPES_AS_CONCAT を設定して、CSV を出力する SQL
- MySQL : DB のデータを簡単に沢山作る方法は inner join
- MySQL のコマンドラインの操作
- Windows 環境の MySQL から日本語名のテーブルを コマンドプロンプトでエクスポート(mysqldump.exe)する
- MySQLの日本語オンラインマニュアル、5.6 とその中のいくつかの重要なリンク
- MySQL のコマンドプロンプトからの処理用バッチファイル
- MySQL で、主キーの作り変えのプロセス / serial では、自動的に インデックスが作成されます
- MySQL 5.6 (Generally Available (GA) Releases) インストール
- MySQL : 引数の無い LAST_INSERT_ID() と 引数のある LAST_INSERT_ID( n ) の使用方法
- MySQL における AUTO_INCREMENT 列の設定および詳細
- MySQL のプログラムからの経過時間の表現方法( CAST, STR_TO_DATE, GET_FORMAT, DATE_FORMAT, TIMEDIFF )
- MySQL で出退勤の列を datetime 型で持った場合、列を使用して DATEDIFF と TIMEDIFF で直接計算
- MySQL を UTF-8 環境で作成して、mysqldump.exe でバックアップするバッチファイルのサンプル
- MySQL 5.6 : テストデータ自動作成スクリプト
- PHP + MySQL : Windows の COM を使った ODBC 経由での接続とデータの取得(SELECT)
- VBScript + MySQL : ADO( ODBC ) による接続とデータの取得(SELECT)
- PHP + MySQL : Windows における ODBC 経由での接続とデータの取得(SELECT)
- PHP + MySQL : PDO_MySQL での接続とデータの取得(SELECT)
- PHP + MySQL : MySQL 改良版拡張モジュール mysqli クラスでの接続とデータの取得(SELECT)
- PHP + MySQL : PHP 5.5.0 で非推奨の MySQL 関数での接続とデータの取得(SELECT)