2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

SQLの 分析関数(ウインドウ関数)でちょっと応用が利きそうな便利な使い方を思いついた

Last updated at Posted at 2020-09-09

応用できそうなアイデア

テーブルの抽出条件に、ウィンドウ関数を使用すること

応用例のこちらも参照ください。

例題

以下のような在庫テーブルのレコードのうち、各月ごとの最終営業日のレコードのみ抽出する

元のテーブル

日付 在庫
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

こちらでお試しできます

2
1
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?