GROUP BYとHAVINGで最新日付データを取得します。
GROUP BYとHAVINGで最新日付データを取得する
社員マスタなどで最新のレコードのみを取得して利用するような場面はよくあるかと思います。
そこでSQLを使って最新日付データを取得します。
1.データを作る
利用するデータを作成します。
--------------------------------------- --テーブルを作成する --------------------------------------- CREATE TABLE 社員マスタ ( cd int ,name VARCHAR(20) ,addr VARCHAR(40) ,from_date date ) --------------------------------------- --データを作成する --------------------------------------- INSERT INTO 社員マスタ VALUES( 1, '太郎さん', '北海道', '2010/01/01') INSERT INTO 社員マスタ VALUES( 1, '太郎さん', '青森', '2011/01/01') INSERT INTO 社員マスタ VALUES( 1, '太郎さん', '東京', '2013/01/01') INSERT INTO 社員マスタ VALUES( 2, '次郎さん', '沖縄', '2010/01/01') INSERT INTO 社員マスタ VALUES( 2, '次郎さん', '鹿児島', '2011/01/01') INSERT INTO 社員マスタ VALUES( 2, '次郎さん', '大阪', '2013/01/01') INSERT INTO 社員マスタ VALUES( 3, '三郎さん', '高知', '2010/01/01')
2.最新日付データを取得
最新日付データを取得を取得します。
--------------------------------------- --最新日付のものだけを取得する --------------------------------------- SELECT T1.cd ,T1.name ,T1.addr ,T1.from_date FROM 社員マスタ AS T1 INNER JOIN ( SELECT cd AS F1 ,MAX(from_date) AS F2 FROM 社員マスタ GROUP BY cd ) AS T2 ON T2.F1=T1.cd AND T2.F2=T1.from_date ORDER BY cd
3.作成したデータを削除
作成したデータを削除します。
--------------------------------------- --テーブルを削除する --------------------------------------- DROP TABLE 社員マスタ
4.最新日付データの取得結果
最新日付データの取得結果です。
cd | name | addr | from_date |
---|---|---|---|
1 | 太郎さん | 東京 | 2013-01-01 |
2 | 次郎さん | 大阪 | 2013-01-01 |
3 | 三郎さん | 高知 | 2010-01-01 |
ちゃんと最新日付けデータが取得できてます。