【问题标题】:Get max value from a joined list paired with another column in DB2从与 DB2 中的另一列配对的连接列表中获取最大值
【发布时间】:2018-09-13 21:41:45
【问题描述】:

我有以下表格:

表一:

 etu |  nr |
  1     2
  2     2
  2     3
  2     1
  3     4
  3     9

表 A:

 etu | rsp | nr
  2     8    2
  2     7    3
  2     3    1
  3     2    4
  3     6    9

现在我想要的结果表是

 etu  |  nr | rsp 
  2..    3     7
  3..    9     6

所以 etu 和 nr 链接在一起,如果有多个相等的 etu 条目可用,则仅采用具有最高 nr 的条目,并将 rsp 值添加到结果表中。此外,如果表 I 中有更多可用的 etu 条目,则将 .. 添加到 etu 值中。

说明:对于 3 9 6 行:表 I 的最后一行是 3 9,所以 3 是要查找的数字,9 是这 3 行的最大数字。因此,我们将其添加并为其添加 rsp 值( 6 ),然后将其添加到结果表中。对于第 2 行,它是相同的 2 3 是表 I 中最高的 2 行。

我得到了类似的东西:

 select x.etu, x.rsp, y.nr from(
 select i.etu etu, max(i.nr) maxnr, a.rsp from i left join a on
 i.etu=a.etu and i.nr=a.nr group by etu)t
 inner join a x on x.etu=t.etu and x.nr=t.nr inner join y on y.etu=t.etu 
 and y.nr=t.nr

 select i.etu, max(i.nr) a.rsp from i left join a on i.etu=a.etu and 
 i.nr=a.nr grounp by

甚至没有让我接近得到我想要的结果,当得到正确的结果时,在 etu 之后添加 ..。

系统为DB10.5 Windows。

提前感谢您的所有帮助。

维京人

【问题讨论】:

  • 您需要处理描述。这两个表与问题有什么关系?输出的逻辑没有意义。当nr中的数据没有“9”行时,“9”如何出现在nr列?
  • 您是否打算交换 rspnr 值,或者这是一个错字?
  • 错字我更正

标签: sql group-by db2 subquery max


【解决方案1】:

我会在这里使用这样的 CTE:

with tmp as (
  select i.etu, max(i.nr) as nt, count(*) as cnt
    from i
    group by i.etu)
select case
         when tmp.cnt = 1 then char(a.etu)
         else concat(rtrim(char(a.etu)), '..')
       end as etu,
       a.nr, 
       a.rsp
  from tmp
    left outer join a 
      on a.etu = tmp.etu
        and a.nr = tmp.nr

CTE 提供加入a 以获得正确响应所需的信息,并根据需要附加..

【讨论】:

  • 谢谢它的工作。我需要更改 tmp 选择,因为并非所有 etu 都在两个表中,但我现在工作得很好。
  • 做一个右连接,或者交换tmpa的顺序
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-22
  • 2020-05-20
  • 1970-01-01
  • 1970-01-01
  • 2016-01-21
相关资源
最近更新 更多