【问题标题】:Retrieving value from one column based off max of another根据另一列的最大值从一列中检索值
【发布时间】:2017-11-09 03:07:13
【问题描述】:

我有一个数据集 (SQL Server 2012) 我正在尝试从每个帐号中提取最终的每月总计,并将不同的位置汇总在一起。我需要 YYYYMMDD 中该月最后一天的最终余额数。拉入最小值或最大值将不起作用,因为余额可能更高或更低,但它需要 Group By 函数的聚合。你怎么能参考余额?

参见下面的示例,目标输出低于该示例

Account#    Location    Balance    YYYYMMDD   YYYYMM  
     1       South      $400       20171030   201710  
     1       South      $395       20171031   201710  
     1       South      $402       20171101   201711  
     1       South      $408       20171102   201711  
     1       North      $75        20171030   201710  
     1       North      $80        20171031   201710  
     1       North      $80        20171101   201711  
     1       North      $72        20171102   201711  
     2       South      $5,000     20171030   201710  
     2       South      $5,200     20171031   201710  
     2       South      $5,200     20171101   201711  
     2       South      $5,500     20171102   201711  
     2       North      $2,000     20171030   201710  
     2       North      $1,800     20171031   201710  
     2       North      $1,700     20171101   201711  
     2       North      $1,600     20171102   201711  


Account#    Balance    YYYYMM  
     1       $475      201710  
     1       $480      201711  
     2       $7,000    201710  
     2       $7,100    201711 

谢谢!

【问题讨论】:

  • 我把这个问题读了 3 遍,不知道你是怎么得到这些数字的。看起来你有一个XY Problem
  • 10/31 是该月的最后一天。因此,对于帐户 1,它将增加 395 美元(从南部位置)和 80 美元(从北部位置),总计 475 美元。对于 11 月,它将加上最后一个日期,即 408 美元和 72 美元,总计 480 美元。
  • 那条评论对 MarkJ 非常有用,现在这个问题更有意义了
  • @MarkJ 我认为你应该在你的问题中添加条件并解释它,这将使问题清晰,你会得到更好的答案。

标签: sql sql-server


【解决方案1】:

row_number()是一个典型的方法:

select t.*
from (select account, yyyymm, yyyymmdd, sum(balance) as balance,
             row_number() over (partition by account, yyyymm order by yyyymmdd desc) as seqnum
      from t
      group by account, yyyymm, yyyymmdd
     ) t
where seqnum = 1;

【讨论】:

  • @Gordon--我对“yyyymm”分区而不是“yyyymmdd”分区的工作方式感到困惑。我认为按“yyyymm”和帐户进行分区会将帐户 1 的所有值与 201710 相加,这将增加 400 美元+395 美元+75 美元+80 美元。
  • @jackstraw22 。 . .我不知道你为什么认为数字会加在一起。查询中没有sum()+
  • @Gordon---是的,你是对的。我想多了,看看计算中涉及的分区。
猜你喜欢
  • 2021-12-31
  • 2021-05-17
  • 1970-01-01
  • 2021-07-25
  • 2012-05-29
  • 2021-05-25
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
相关资源
最近更新 更多