首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Group By和SUM with date range条件的sql

Group By和SUM with date range条件的sql
EN

Stack Overflow用户
提问于 2021-11-10 08:35:41
回答 1查看 34关注 0票数 1

下面是Invoices表:

我正在尝试执行一个sql查询,该查询根据due_date范围和balance_amount group by company_id的总和得出输出。

我的尝试:

代码语言:javascript
复制
select invoices.company_id,
SUM(invoices_cmonth.balance_amount) as cmonth,
SUM(invoices_1month.balance_amount) as 1month,
SUM(invoices_2month.balance_amount) as 2month
from `invoices` 
LEFT JOIN invoices invoices_cmonth 
ON (invoices.company_id = invoices_cmonth.company_id and invoices_cmonth.due_date >= '2021-11-10') 
LEFT JOIN invoices invoices_1month 
ON (invoices.company_id = invoices_1month.company_id and invoices_1month.due_date < '2021-11-10' and invoices_1month.due_date >= '2021-10-10')
LEFT JOIN invoices invoices_2month 
ON (invoices.company_id = invoices_2month.company_id and invoices_2month.due_date < '2021-10-10' and invoices_2month.due_date >= '2021-9-10')
where invoices.`status` = 'ACTIVE' 
and invoices.`balance_amount` > 0 
and `invoices`.`deleted_at` is null 
group by invoices.`company_id`

但它给了我错误的余额数字。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-10 08:40:12

我建议对不同的时间窗口使用条件聚合对invoices表进行一次遍历:

代码语言:javascript
复制
SELECT
    company_id,
    SUM(CASE WHEN due_date >= '2021-11-10' THEN balance_amount ELSE 0 END) AS cmonth,
    SUM(CASE WHEN due_date >= '2021-10-10' AND due_date < '2021-11-10'
             THEN balance_amount ELSE 0 END) AS 1month,
    SUM(CASE WHEN due_date >= '2021-09-10' AND due_date < '2021-10-10'
             THEN balance_amount ELSE 0 END) AS 2month
FROM invoices
WHERE
    status = 'ACTIVE' AND balance_amount > 0 AND deleted_at IS NULL
GROUP BY
    company_id;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69910017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档