如何解决我需要找到上个月开具发票金额大于0且在当月未开具发票的用户数量
我需要找到上个月开具发票金额大于0且在当月未开具发票的用户数量。此计算将在单个查询中进行12个月。输出应如下所示。
月数
01/07/2019 50
01/08/2019 34
01/09/2019 23
01/10/2019 98
01/11/2019 10
01/12/2019 5
2020年1月1日32
2020年2月1日65
01/03/2020 23
01/04/2020 12
01/05/2020 64
2020年6月1日54
2020年1月7日78
我只能获得一个月的价值。我想在一个查询中获得所有月份的信息。
这是我当前的查询:
SELECT COUNT(DISTINCT TWO_MONTHS_AGO.USER_ID),TWO_MONTHS_AGO.MONTH AS INVOICE_MONTH
FROM (
SELECT USER_ID,LAST_DAY(invoice_ct_dt)) AS MONTH
FROM table a AS ID
WHERE invoice_amt > 0
AND LAST_DAY(invoice_ct_dt)) = ADD_MONTHS(LAST_DAY(CURRENT_DATE - 1),- 2)
GROUP BY user_id
) AS TWO_MONTHS_AGO
LEFT JOIN (
SELECT user_id,LAST_DAY(invoice_ct_dt)) AS MONTH
FROM table a AS ID
AND LAST_DAY(invoice_ct_dt)) = ADD_MONTHS(LAST_DAY(CURRENT_DATE - 1),- 1)
GROUP BY USER_ID
) AS ONE_MONTH_AGO ON TWO_MONTHS_AGO.USER_ID = ONE_MONTH_AGO.USER_ID
WHERE ONE_MONTH_AGO.USER_ID IS NULL
GROUP BY INVOICE_MONTH;
先谢谢您。 罗娜
解决方法
可能有很多不同的方法,但是我做的方法如下:
- 按用户和月份汇总过去13个月中的数据(您需要12个月以及该月的前一个月
- 将“具有数据的本月”与“下一个月”进行比较,并选择没有“下一个月”数据的记录
- 按月份和不同的用户ID汇总此数据集
例如,假设创建的表如下:
create table INVOICE_DATA (
USERID varchar(4),INVOICE_DT date,INVOICE_AMT NUMBER(10,2)
);
以下查询应会为您提供所需的内容-您可能需要根据计算中是否包括本月或仅到上月底进行调整,等等。
--Summarise data by user and month
WITH MONTH_SUMMARY AS
(
SELECT USERID,TO_CHAR(INVOICE_DT,'YYYY-MM') "INVOICE_MONTH",TO_CHAR(ADD_MONTHS(INVOICE_DT,1),'YYYY-MM') "NEXT_MONTH",SUM(INVOICE_AMT) "MONTHLY_TOTAL"
FROM INVOICE_DATA
WHERE INVOICE_DT >= TRUNC(ADD_MONTHS(current_date(),-13),'MONTH') -- Last 13 months of data
GROUP BY 1,2,3
),--Get data for users with invoices in this month but not the next month
USER_DATA AS
(
SELECT USERID,INVOICE_MONTH,MONTHLY_TOTAL
FROM MONTH_SUMMARY MS_THIS
WHERE NOT EXISTS
(
SELECT USERID
FROM MONTH_SUMMARY MS_NEXT
WHERE
MS_THIS.USERID = MS_NEXT.USERID AND
MS_THIS.NEXT_MONTH = MS_NEXT.INVOICE_MONTH
)
AND MS_THIS.INVOICE_MONTH < TO_CHAR(current_date(),'YYYY-MM') -- Don't include this month as obviously no next month to compare to
)
SELECT INVOICE_MONTH,COUNT(DISTINCT USERID) "USER_COUNT"
FROM USER_DATA
GROUP BY INVOICE_MONTH
ORDER BY INVOICE_MONTH
;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。