Php 我需要帮助创建SQL查询

Php 我需要帮助创建SQL查询,php,mysql,sql,Php,Mysql,Sql,我需要拿出一份类似这样的报告: 有三个表:代理、销售和付款。销售和付款通过代理表链接。该报告将显示每个代理商每天的总销售额。它还需要显示代理每天支付的任何款项,并从总销售余额中扣除,以便在任何时间点我们都可以知道代理是否欠业务,反之亦然 我计划解决这个问题的方法是: 获取每个代理每天的所有销售额(一个查询) 获取每个代理每天的所有付款(一个查询) 对于每个销售、代理和每天检查(代理每天支付每个代理)(循环) 如果找到匹配项,则获取值并用于计算累积总数 否则,只显示相应的销售数据和累计总额

我需要拿出一份类似这样的报告:

有三个表:代理、销售和付款。销售和付款通过代理表链接。该报告将显示每个代理商每天的总销售额。它还需要显示代理每天支付的任何款项,并从总销售余额中扣除,以便在任何时间点我们都可以知道代理是否欠业务,反之亦然

我计划解决这个问题的方法是:

  • 获取每个代理每天的所有销售额(一个查询)
  • 获取每个代理每天的所有付款(一个查询)
  • 对于每个销售、代理和每天检查(代理每天支付每个代理)(循环)
  • 如果找到匹配项,则获取值并用于计算累积总数
  • 否则,只显示相应的销售数据和累计总额
我不确定是否有疑问可以让我的生活更轻松一点。谢谢

[编辑]

代理表: 身份证件 名称 期初余额

销售表: 身份证件 探员(身份证), 数量 客户识别码, 销售日期

付款表: 身份证件 探员(身份证), 数量 银行id, 付款日期:, 地位

[第二次编辑]

谢谢奥拉夫·迪奇。没有子选择的第二个查询运行了很长时间。大约88秒。我还尝试了子选择的第一个,它在一瞬间完成,但是总和(s.amount)和总和(p.amount)的值是它们应该的两倍

[第三次编辑]

一个代理可以进行多次销售和销售 代理可以进行多次付款

销售和付款之间没有直接的联系

这是第一次削减

select a.name, s.sale_date, sum(s.amount), sum(p.amount),
       (select sum(amount)
        from sales
        where agent_id = a.id and sale_date <= s.sale_date) as cum_sales,
       (select sum(amount)
        from payments
        where agent_id = a.id and payment_date <= s.sale_date) as cum_payments
from agents a
join sales s on s.agent_id = a.id
join payments p on p.agent_id = a.id
group by s.agent_id, s.sale_date
order by s.agent_id, s.sale_date


这两个都未经测试,因为我没有数据进行测试。

这些都由“代理”连接,如果您提供表详细信息(列名),我可以帮助您编写一个查询来连接这些。请发布表的结构。您需要的是一个带有聚合函数的
JOIN
groupby
,那么这将是累积总数的问题。您可以发布有关代理表的更多详细信息吗?
select a.name, s.sale_date, sum(s.amount), sum(p.amount),
       sum(cs.amount) as cum_sales,
       sum(cp.amount) as cum_payments
from agents a
join sales s on s.agent_id = a.id
join payments p on p.agent_id = a.id
join sales cs on cs.agent_id = a.id and cs.sale_date <= s.sale_date
join payments cp on cp.agent_id = a.id and cp.payment_date <= s.sale_date
group by s.agent_id, s.sale_date
order by s.agent_id, s.sale_date