【发布时间】:2016-11-11 13:37:22
【问题描述】:
我在为给定期间的特定 Acc、Nam 选择余额总和时遇到问题。
SELECT Acc, Nam, SUM(Bal) FROM table WHERE
MAX(Par) = (SELECT Par WHERE Acc IN (101,102) AND Dat >1105 AND Dat <1405)
AND Acc IN (101,102) AND Dat >1105 AND Dat <1405
GROUP BY Acc, Nam
Acc --- Nam --- Bal --- Par --- Dat
101 --- One --- 150 --- 131 --- 1205
101 --- One --- 120 --- 132 --- 1205
101 --- One --- 160 --- 133 --- 1305
102 --- Two --- 190 --- 121 --- 1205
102 --- Two --- 110 --- 122 --- 1305
102 --- Two --- 150 --- 123 --- 1305
最终的输出应该是:
Acc --- Nam --- Bal
101 --- One --- 280
102 --- Two --- 340
因此,它将汇总由帐户和帐户名称分隔的期间内的所有余额。只有每天最高面值的余额才应合计。请指教。
更新
我用下面的 row_number 方法做到了,但我收到的只是所有行的总数(没有其中一些)。下面是显示的代码:两个帐户,两个帐户描述,参数,日期和余额。我想看到两行,它们将是给定帐户范围内所有日期的总和,在单独的一天中具有最高参数编号。最终输出应该只有三列:account、name 和 balance。此查询应该能够选择每天的最大参数并将所有这些最大值汇总到一个帐户。
SELECT h.account, h.name, h.paramet, h.date, h.balance
FROM h
WHERE TRUNC(h.date) > '01-Jun-16' AND TRUNC(h.date) < '10-Jun-16'
AND h.account IN ('410212','410213')
AND h.fund LIKE 'SSPSP
【问题讨论】:
-
你是说这不起作用:SELECT Acc, Nam, SUM(Bal) FROM table WHERE Acc IN (101,102) AND Dat >1105 AND Dat
-
MAX() 不能放在 WHERE 语句中,但可以放在 HAVING 子句中,该子句是在分组和聚合之后确定的。 Next (SELECT Par WHERE Acc IN (101,102) AND Dat >1105 AND Dat
-
@Matt 输入查询应该是:` SELECT h.account, h.name, h.paramet, h.date, h.balance FROM h WHERE TRUNC(h.date) > '01-Jun -16' AND TRUNC(h.date)
-
@JayKumarR 它在整个期间显示具有最大参数的行 - 不是每天