最近、私は過去に複数のステップを踏まなければ解決できなかった興味深いSQLの問題が現れました。特定の期間内に特定のステータスのアイテムの数を取得するクエリ
シンプルな「ItemStatus」テーブルがあるとします。これは、さまざまなアイテムのステータスを追跡するために存在します。列は「itemId」、「date status changed」、および「status」です。例:
ItemId DateStatusChanged Status
1 09/01/2016 New
1 10/15/2016 Complete
2 10/20/2016 New
2 10/25/2016 Complete
アイテムは、変更されるまで同じ状態であるとみなされます。したがって、アイテム1は9/1を開始する「新規」であり、「完了」に変更された10/15まで「新規」になりました。アイテム2は10/20から10/25までの「新規」でした。
2016年10月(この場合は「2」)にいつでも「新」ステータスを持つアイテムの数を取得するには、テーブルをクエリします。この結果を返すことができる単一のSQLクエリはありますか?
ああ、はい、完璧な - それは私が擬似-SQLで考えていたものの線に沿ってのですが、かなり変換できませんでした。問題の項目の "新しい"状態変更レコードが存在するかどうかをチェックしたいので、status = 'New'のdatestatuschangedのためにある種の "プレースホルダ"変数が必要であることを知っていました*その日、10月1日以前。ありがとうございました! – Cmaso
私は最終行がタイプミスであったと思いますが、そのクエリを実行すると1のカウントが返されます。2のカウントを取得するには(2016年10月中のいずれかの時点で両方の項目が「新規」でした)、クエリの最後の行は「and is2.datestatuschanged <'2016-10-01'」となります。 – Cmaso
Ayup。修正しました。 –