私はプロジェクト データのビューを与えられ、特定の月にいくつのプロジェクトが開かれていたかを要約するように求められました。
PROJECT_ID OPEN_DATE CLOSE_DATE OWNER
1 8/01/2012 09/01/2012 JEFF
2 8/08/2012 10/01/2012 JEFF
3 9/01/2012 Null JEFF
4 9/12/2012 Null JEFF
5 9/24/2012 11/01/2012 JEFF
6 10/01/2012 12/01/2012 JEFF
7 10/09/2012 01/01/2013 JEFF
このようなOPENカウントが必要です。基本的なクエリを取得したら、プロジェクト オーナーごとにフィルタリング/グループ化する必要があります
AUG12 SEPT12 OCT12 NOV12 DEC12 JAN13 FEB13
2 4 5 4 3 2 1
^ ^ ^ ^ ^ ^ ^
| | | | | | |-> From Projects 3 & 4
| | | | | |-> From Projects 3 & 4
| | | | |-> From Projects 3,4 & 7
| | | |-> From Projects 3,4,6 & 7
| | |-> From Projects 3,4,5,6 & 7
| |-> From Projects 2,3,4, & 5
|-> From Project 1 & 2
最新 これは、Gordon の提案による接続に基づいて私が持っているものです。クエリは約 4 ~ 5 秒遅い
SELECT SUM(case when (OPEN_DATE <= thedate and CLOSE_DATE > thedate) or (OPEN_DATE <= thedate and CLOSE_DATE Is Null) then 1 else 0 end) as Open
1. From (select * FROM Project
2. WHERE Project.Owner = :owner AND Project.action_for = :actionFor )
3. cross join ( select add_months(last_day(SYSDATE), level-7)
4. as thedate from dual connect by level <= 12 )
5. group by to_char(thedate, 'YYYY-MM') order by 1
遅いだけでなく、実際のデータで正しく機能しているかどうかもわかりません。結果を手動で確認できる結果を得るには、クエリを分解する必要があります。SQLステートメントをどのようにデバッグしますか? 結果が得られたからといって、それらが正しいことをどのように知ることができますか?