1

個々の選択がテーブルから最新の結果を引き出すクエリがあります。だから私はid descで選択順序を持っているので、最新のものは一番上にあり、rownumを使って一番上の番号を表示します。各選択は、最新の結果が必要な別の場所です。

ただし、私が直面している問題は、ユニオンオールの選択ステートメントで order by を使用できないことです。

select 'MUHC' as org, 
       aa, 
       messagetime 
  from buffer_messages 
 where aa = 'place1' 
   and rownum = 1 
 order by id desc
union all 
select 'MUHC' as org, 
       aa, 
       messagetime 
  from buffer_messages 
 where aa = 'place2' 
   and rownum = 1
 order by id desc;

各選択には順序が必要です。そうしないと、最新バージョンがプルされません。これを完全に行う別の方法、またはユニオンでこれを行う方法で、望ましい結果が得られるというアイデアはありますか?

4

3 に答える 3

0

句の前にwhere .. and rownum = 1条件order byを配置すると、句が適用された後に結果セットが順序付けられるため、目的の結果が生成されませんwhere。したがって、結果セット内の 1 つの行のみが順序付けられます。これは、クエリによって返される最初の行になります。

order byさらに、句を句の直前に置くことは意味的に正しくありません。ラッパーのselect ステートメントunion allが必要になります。

SQL ステートメントを次のように書き換えることができます。

select *
  from ( select 'MUHC' as org
               , aa 
               , messagetime 
               , row_number() over(partition by aa
                                       order by id desc) as rn
           from buffer_messages 
        ) s
where s.rn = 1

そして、ここに2番目のアプローチがあります:

select max('MUHC')                                         as org
     , max(aa)                                             as aa
     , max(messagetime) keep (dense_rank last order by id) as messagetime 
 from buffer_messages
group by aa
于 2013-10-03T20:28:41.250 に答える