応用できそうなアイデア
テーブルの抽出条件に、ウィンドウ関数を使用すること
応用例のこちらも参照ください。
例題
以下のような在庫テーブルのレコードのうち、各月ごとの最終営業日のレコードのみ抽出する
元のテーブル
日付 | 在庫 |
---|---|
2020-01-10 | 12 |
2020-01-29 | 10 |
2020-02-20 | 15 |
2020-02-28 | 13 |
2020-03-10 | 23 |
2020-03-20 | 20 |
2020-03-31 | 18 |
抽出結果
日付 | 在庫 |
---|---|
2020-01-29 | 10 |
2020-02-28 | 13 |
2020-03-31 | 18 |
テストデータ作成
テーブルを作成して、データを投入します。
CREATE TABLE 在庫テーブル(日付 CHAR(10),在庫 INT);
INSERT INTO 在庫テーブル VALUES('2020-01-10', 12);
INSERT INTO 在庫テーブル VALUES('2020-01-29', 10);
INSERT INTO 在庫テーブル VALUES('2020-02-20', 15);
INSERT INTO 在庫テーブル VALUES('2020-02-28', 13);
INSERT INTO 在庫テーブル VALUES('2020-03-10', 23);
INSERT INTO 在庫テーブル VALUES('2020-03-20', 20);
INSERT INTO 在庫テーブル VALUES('2020-03-31', 18);
SQLの実行
以下のSQLを実行します
SELECT 日付 , 在庫
FROM (SELECT 日付 , 在庫
, MAX(日付) OVER (PARTITION BY LEFT(日付,7)) AS 月末日
FROM 在庫テーブル) AS Z
WHERE 日付 = 月末日
サブクエリ部分の実行結果
日付 | 在庫 | 月末日 |
---|---|---|
2020-01-10 | 12 | 2020-01-29 |
2020-01-29 | 10 | 2020-01-29 |
2020-02-20 | 15 | 2020-02-28 |
2020-02-28 | 13 | 2020-02-28 |
2020-03-10 | 23 | 2020-03-31 |
2020-03-20 | 20 | 2020-03-31 |
2020-03-31 | 18 | 2020-03-31 |
SQL全体の実行結果
日付 | 在庫 |
---|---|
2020-01-29 | 10 |
2020-02-28 | 13 |
2020-03-31 | 18 |
こちらでお試しできます