仅连接特定字段中值最小的行



我的目标是左连接表'anla'和'anlz',但只包括anlz字段'bdatu'值最小的所有行。

我用模式创建了一个SQL小提琴:http://sqlfiddle.com/#!2/ad3ab2/5

不幸的是,我需要它用于带有 Oracle 数据库而不是 MySQL 的 ABAP 程序,所以这个例子对我不起作用。我在其中添加了MySQL标签,以获取更多输入和可能的解决方案。

表安拉:

anln1 |  anln2
--------------
10000 |  0
10000 |  1
10000 |  2
10000 |  3
10001 |  0
10001 |  1
10001 |  2
10002 |  0
10003 |  0
10004 |  0
10005 |  0
10005 |  1
10006 |  0
10006 |  1
10007 |  0
10007 |  1

表安兹:

anln1 | anln2 | kostlv | bdatu
---------------------------------
10000 |  0    | 123    | 20001231
10000 |  0    | 456    | 99991231
10000 |  1    | 123    | 99991231
10000 |  2    | 456    | 99991231
10000 |  3    | 789    | 99991231
10001 |  0    | 123    | 99991231
10001 |  1    | 123    | 99991231
10001 |  2    | 123    | 99991231
10002 |  0    | 123    | 99991231
10003 |  0    | 456    | 99991231
10004 |  0    | 123    | 99991231
10005 |  0    | 123    | 99991231
10005 |  1    | 456    | 99991231
10006 |  0    | 123    | 20001231
10006 |  0    | 456    | 99991231
10006 |  1    | 123    | 99991231
10007 |  0    | 123    | 20001231
10007 |  0    | 123    | 99991231
10007 |  1    | 123    | 99991231

期待您的帮助!

你几乎拥有它,需要小的调整:

SELECT DISTINCT anla.anln1, anla.anln2, z.kostlv, z.bdatu
FROM anla
LEFT OUTER JOIN
             (SELECT anlz.anln1, anlz.kostlv, min(anlz.bdatu) as bdatu /* note this here*/
              FROM anlz
              GROUP BY anlz.anln1
              HAVING MIN( anlz.bdatu ) > 0 ) AS Z
on anla.anln1= z.anln1

您只需要在子查询中也选择min(anlz.bdatu)

在这里摆弄

输出

ANLN1   ANLN2   KOSTLV  BDATU
10000    0       123    20001231
10000    1       123    20001231
10000    2       123    20001231
10000    3       123    20001231
10001    0       123    99991231
10001    1       123    99991231
10001    2       123    99991231
10002    0       123    99991231
10003    0       456    99991231
10004    0       123    99991231
10005    0       123    99991231
10005    1       123    99991231
10006    0       123    20001231
10006    1       123    20001231
10007    0       123    20001231
10007    1       123    20001231

这里的逻辑很简单,在内部查询中也选择min bdatu,这将有助于外部查询

在预言机中使用子查询分解可以实现相同的目标

请尝试以下操作

with sub as 
    (SELECT anlz.anln1, anlz.kostlv,(SELECT min(anlz1.bdatu) bdatu
     from 
     anlz anlz1
     where    anlz.anln1=anlz1.anln1
    GROUP BY anlz1.anln1
    HAVING MIN( anlz1.bdatu ) > 0) ) 
     as bdatu
     from anlz 
     ) 
     SELECT DISTINCT a nla.anln1, anla.anln2,      sub.kostlv, sub.bdatu
FROM anla
LEFT OUTER JOIN sub
ON anla.anln1 =  sub.anln1

相关内容

  • 没有找到相关文章