簡體   English   中英

SQL查詢返回每月第一天的數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM