两个表连接网格,具有不同的行

时间:2014-09-23 14:27:19

标签: sql postgresql

我想建立一个这样的表:

简要总结
两个表中的所有列。
由DISTINCT日行排序。
汇总每天所有到期付款NAEDO
总结每天所有成功/不成功的付款。 paysoft
当天支付的总额
当天的未偿还总数

enter image description here

此网格中有两个表格。

付款到期 [NAEDO]并且付款已经付款/或失败 [paysoft]

每天都有多个交易,网格按日分组,当天在该行汇总的交易。

带有测试数据的

FIDDLE

我尝试了一下,但我正在努力加入两张桌子。

SELECT 
    n.day,
    n.ACCOUNTS,
    ammount
FROM 
(
    SELECT  DISTINCT start_date, extract(day from start_date) as day, count(*)as ACCOUNTS, sum(amount)as ammount
    FROM NAEDO
    WHERE start_date >= '2014-08-13' AND start_date <= '2014-09-12'
    GROUP BY start_date
    ORDER BY start_date
) n
LEFT JOIN
(
    ????
) ps ON ps. = ps.custno
GROUP BY start_date, n.day, n.ACCOUNTS, ammount
ORDER BY start_date

因此,此查询(没有第二个空白的查询)会创建行并输入截止当天的应付金额以及截止当天的帐户金额。
但是尝试加入表格会导致DISTINCT选择

请帮助或指导我取得成果。

1 个答案:

答案 0 :(得分:0)

如果我正确地阅读了您想要的桌子,您就不需要DISTINCT,并且您的连接条件是错误的。看起来您根据客户编号尝试加入,但您对此并不感兴趣。相反,您需要加入日期(n.start_date = ps.pay_date)。我稍微更新了您的代码,以显示我认为您希望您的加入如何工作。

SELECT 
  n.day,
  n.ACCOUNTS,
  n.ammount,
  ps.amt_paid
FROM 
(
  SELECT  start_date, extract(day from start_date) as day, count(*)as ACCOUNTS, sum(amount)as ammount
  FROM NAEDO
  WHERE start_date >= '2014-07-13' AND start_date <= '2014-08-12'
  GROUP BY start_date
  ORDER BY start_date
) n
LEFT JOIN
(
  Select pay_date, sum(amount) as amt_paid
  From paysoft
  Group By pay_date
  Order By pay_date
) ps On n.start_date = ps.pay_date
Order By n.start_date

这并不是决定成功百分比的逻辑因素,也不排除来自amt_paid的失败付款,但它应该让您开始。以这种方式构建查询也会导致计算帐户数量时出现问题。如上所述,它仅计算在特定日期应付款项的帐户数量。它可以很容易地更改为包括在特定日期付款的帐户,但是您可能会将某些帐户计入两次。