首页 文章

ORACLE SQL按编号仅选择每组的MAX

提问于
浏览
0

在给定时间内选择特定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

因此,它将按帐户和帐户名称分隔的期间内的所有余额的总和 . 只有每天最高Par数的余额应总计合计 . 请指教 .

UPDATE

我用下面的row_number方法做了,但我收到的只是所有行的总数(没有一些) . 以下是显示的代码:两个帐户,两个帐户说明,参数,日期和余额 . 我想看到两行,它们是给定帐户范围内所有日期的总和,并且在一天内具有最高参数编号 . 最终输出应该只有三列:帐户,名称和余额 . 此查询应该能够选择每天的最大参数并将所有这些最大值汇总到一个帐户 .

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

2 回答

  • 3

    您可以使用 row_number()

    SELECT Acc, Nam, SUM(Bal)
    FROM (SELECT t.*,
                 ROW_NUMBER() OVER (PARTITION BY Acc, Nam, Dat ORDER BY Par DESC) as seqnum
          FROM table t
          WHERE Acc IN (101,102) AND Dat > 1105 AND Dat < 1405
         ) t
    WHERE seqnum = 1
    GROUP BY Acc, Nam;
    
  • 0

    我有下一个与上述查询相关的问题 . 如何创建一个包含两个SUM(Bal)列的表,彼此具有不同的Date:

    Acc --- Nam --- Bal(Dat1) - Bal(Dat2)
    101 ---一个------- 280 ---------- 300
    102 ---两个------- 340 ---------- 180

    SELECT Acc, Nam, SUM(Bal)
    FROM (SELECT t.*,
                 ROW_NUMBER() OVER (PARTITION BY Acc, Nam, TRUNC(Dat) ORDER BY Par DESC) as seqnum
          FROM table t
          WHERE Acc IN (101,102) AND Dat = 1105 
         ) t
    WHERE seqnum = 1
    GROUP BY Acc, Nam;
    
    SELECT Acc, Nam, SUM(Bal)
    FROM (SELECT t.*,
                 ROW_NUMBER() OVER (PARTITION BY Acc, Nam, TRUNC(Dat) ORDER BY Par DESC) as seqnum
          FROM table t
          WHERE Acc IN (101,102) AND Dat = 1405
         ) t
    WHERE seqnum = 1
    GROUP BY Acc, Nam;
    

相关问题