[英]SQL Query to return data for the first of every month
我想找到最近12個月每個月初某個部門的員工人數。
我可以使用12個單獨的查詢和UNION ALL
來獲得所需的輸出,如下所示:
SELECT
o.DEP_ID
,COUNT(o.STAFF_ID) STAFF_COUNT
,TRUNC(SYSDATE,'MON') EFFECTIVE_DATE
FROM
OCCUPANCIES o
WHERE
o.START_DATE <= TRUNC(SYSDATE,'MON')
AND o.END_DATE >= TRUNC(SYSDATE,'MON')
GROUP BY
o.DEP_ID
,TRUNC(SYSDATE,'MON')
UNION ALL
SELECT
o.DEP_ID
,COUNT(o.STAFF_ID) STAFF_COUNT
,ADD_MONTHS(TRUNC(SYSDATE,'MON'),-1) EFFECTIVE_DATE
FROM
OCCUPANCIES o
WHERE
o.START_DATE <= ADD_MONTHS(TRUNC(SYSDATE,'MON'),-1)
AND o.END_DATE >= ADD_MONTHS(TRUNC(SYSDATE,'MON'),-1)
GROUP BY
o.DEP_ID
,ADD_MONTHS(TRUNC(SYSDATE,'MON'),-1)
這使我的輸出類似於以下內容:
不幸的是,我的真實查詢很長,而且編輯起來至少變得笨拙,因為我每次都在12個地方進行相同的更改。
有沒有辦法在單個SELECT語句中執行此操作?
編輯:我已將示例上載到SQLFiddle
您可以生成有效日期列表,並在查詢中使用它
SELECT
o.DEP_ID
,COUNT(o.STAFF_ID) STAFF_COUNT
,dt.EFFECTIVE_DATE
FROM
OCCUPANCIES o,
(SELECT ADD_MONTHS(TRUNC(SYSDATE,'MON'), 1-LEVEL) EFFECTIVE_DATE
FROM dual
CONNECT BY LEVEL <=12) dt
WHERE
dt.EFFECTIVE_DATE BETWEEN o.START_DATE AND o.END_DATE
GROUP BY
o.DEP_ID
,dt.EFFECTIVE_DATE
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.