微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

显示总和的最大值

如何解决显示总和的最大值

| 我试图找到一个求和结果的最大值,但我也找不到一种显示日期的方法我有一个表事务,其数据如下:
transaction_date--Transaction_agent_id--transaction_amount
2/5/11                         321      20
2/5/11                         321      10
2/5/11                         400      100
3/5/11                         321      5
3/5/11                         345      100
3/5/11                         321      10
3/5/11                         345      50
4/5/11                         345      80
4/5/11                         321      5
我想要的结果是这个
transaction_date--Transaction_agent_id--transaction_amount
    2/5/11                       321     30
    2/5/11                       400    100
    3/5/11                       345    150
首先,应该对每个agent_id每天的所有金额进行总计,然后向我显示该代理商的最佳日子。 我所做的是这个
SELECT a.transaction_agent_id,max(a.stotal) FROM
(
SELECT transaction_date,transaction_agent_id,sum(transaction_amount) as \'Stotal\' FROM transactions
GROUP BY transaction_agent_id,transaction_date
)a
GROUP BY a.transaction_agent_id
这给了我
Transaction_agent_id--transaction_amount
               321     30
               400    100
               345    150
这是正确的,但我无法添加transaction_date。 更新:我刚刚解决了它。好吧,如果有人想要这里的解决方案。
SELECT  a.transaction_date,a.transaction_agent_id,max(a.stotal) FROM
(
  SELECT row_number() over (partition by transaction_agent_id order by sum(transaction_amount)desc) AS \'roww\',transaction_date,sum(transaction_amount) as \'Stotal\' FROM transactions
  GROUP BY transaction_agent_id,transaction_date
) a

WHERE a.roww = 1
GROUP BY a.transaction_date,a.roww
谢谢大家的意见。     

解决方法

SQL语句
;WITH Max_Transaction_Amount AS (
    SELECT  Transaction_Date,Transaction_Agent_ID,Transaction_Amount = SUM(Transaction_Amount)
    FROM    q
    GROUP BY
            Transaction_Date,Transaction_Agent_ID
)
SELECT  mta.Transaction_Date,mta.Transaction_Agent_ID,mta.Transaction_Amount
FROM    Max_Transaction_Amount mta 
        INNER JOIN (
            SELECT  Transaction_Agent_ID,Transaction_Amount = MAX(Transaction_Amount)
            FROM    Max_Transaction_Amount
            GROUP BY
                    Transaction_Agent_ID        
        ) q ON  mta.Transaction_Agent_ID = q.Transaction_Agent_ID
                AND mta.Transaction_Amount = q.Transaction_Amount
测试脚本
/* Create test data */
;WITH q (Transaction_Date,Transaction_Amount) AS (
  SELECT \'2/5/11\',321,20
  UNION ALL SELECT \'2/5/11\',10
  UNION ALL SELECT \'2/5/11\',400,100
  UNION ALL SELECT \'3/5/11\',5
  UNION ALL SELECT \'3/5/11\',345,10
  UNION ALL SELECT \'3/5/11\',50
  UNION ALL SELECT \'4/5/11\',80
  UNION ALL SELECT \'4/5/11\',5
)
/* Actual query */,Max_Transaction_Amount AS (
    SELECT  Transaction_Date,Transaction_Amount = MAX(Transaction_Amount)
            FROM    Max_Transaction_Amount
            GROUP BY
                    Transaction_Agent_ID        
        ) q ON  mta.Transaction_Agent_ID = q.Transaction_Agent_ID
                AND mta.Transaction_Amount = q.Transaction_Amount
    ,只需在外部选择中将“ 7”分组即可:
SELECT a.transaction_date,a.transaction_agent_id,max(a.stotal) FROM
(
  SELECT transaction_date,transaction_agent_id,sum(transaction_amount) as \'Stotal\' FROM transactions
  GROUP BY transaction_agent_id,transaction_date
) a
GROUP BY a.transaction_agent_id,a.transaction_date
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。