MW211 EXIT

devlog
PostgreSQL/今日まで連続して…(1)
2012年08月14日
毎日一件判定した履歴があって、これがキーごとに混在している表があるとする。
しかもキーが複合キーだったりして。
┌──────────────────────────────────────┐
│1-1 2012/05/31 ○                                                           │
│1-1 2012/05/30 ×                                                           │
│  :                                                                        │
│1-2 2012/05/31 ○                                                           │
│  :                                                                        │
│2-1 2012/05/31 ○                                                           │
│  :                                                                        │
└──────────────────────────────────────┘
ま、こんな感じ。

さて、直近の数日間、連続して○だったもの(キー)を抽出したい場合のSQL文とは?
┌──────────────────────────────────────┐
│SELECT キー1,                                                               │
│       キー2                                                                │
│    FROM (SELECT t1.キー1,                                                  │
│                 t1.キー2,                                                  │
│                 t1.判定                                                    │
│              FROM 表 AS t1                                                 │
│              WHERE         (t1.キー1, t1.キー2, t1.日付)                   │
│                  IN (SELECT t2.キー1, t2.キー2, t2.日付                    │
│                          FROM 表 AS t2                                     │
│                          WHERE t2.キー1 = t1.キー1                         │
│                            AND t2.キー2 = t1.キー2                         │
│                      ORDER BY t2.日付 DESC                                 │
│                      LIMIT 規定数                                          │
│                     )                                                      │
│         ) AS 別表名                                                        │
│    WHERE 判定 = TRUE                                                       │
│    GROUP BY キー1,                                                         │
│             キー2                                                          │
│    HAVING COUNT(*) = 規定数                                                │
└──────────────────────────────────────┘
相関問い合わせの複合キーバージョン。
う、う、う、遅い。
分類:PostgreSQL