Informix

如何根據重複的列顯示不包括最大值的值

  • July 14, 2017

我面臨一個具有挑戰性的問題,我需要根據不包括最大值的重複列列印特定列中的所有欄位

我的查詢計劃:

select event_no,
      bs_id
from   bs_bank_mast
where  event_no in (select   event_no 
                   from     bs_bank_mast 
                   group by event_no 
                   having   count(*) > 1) 
order by event_no ASC

我的輸出:

event_no       bs_id

1692163        40672
1692163        41974
1692163        40672
1692163        41974
1723264        67460
1723264        67499
1723264        68357
1723265        67929
1723265        67383
1723266        67735
1723266        67423
1723266        67969
1723266        68164
1723266        67501 


event_no       bs_id

1692163        40672
1723264        67460
1723264        67499
1723265        67929
1723266        67735
1723266        67423
1723266        67969
1723266        68164

所以基本上除了 bs_id 的最後一個最大值之外的所有內容都被列印出來

我試過的查詢:

select event_no,
      bs_id
from   bs_bank_mast
where  event_no in (select   event_no 
                   from     bs_bank_mast 
                   group by event_no 
                   having   count(*) > 1) 
and    event_no < max(bs_id)

我得到的錯誤是:

在這種情況下對聚合的使用不當

請您提供我需要的幫助。

您不能使用聚合的 WHERE 子句。相反,您可以將您的表與您的分組結果集連接起來並丟棄最大值。

select t1.event_no,
      t1.bs_id
from   bs_bank_mast t1
join   (select   event_no, max(bs_id) max_bs_id
       from     bs_bank_mast 
       group by event_no 
       having   count(*) > 1) t2
on     t2.event_no = t1.event_no
and    t1.bs_id <> t2.max_bs_id;
event_no | bs_id
-------: | ----:
 1692163 | 40672
 1692163 | 40672
 1723264 | 67460
 1723264 | 67499
 1723265 | 67383
 1723266 | 67735
 1723266 | 67423
 1723266 | 67969
 1723266 | 67501

dbfiddle在這裡

引用自:https://dba.stackexchange.com/questions/179840