GROUP BYとHAVINGで最新日付データを取得する

プログラミング SQL Server

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

ちゃんと最新日付けデータが取得できてます。

タイトルとURLをコピーしました