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 |
ちゃんと最新日付けデータが取得できてます。
