2017-10-30 13 views
1

私は、各オペレーションで顧客が更新しているデータセットを持っています。 例えば、私はidが機能ファイルから取得している同じテーブルの最後に挿入された2つの行の列値を比較するにはどうすればよいですか?

select id, 
     referance 
from (select id, 
      referance, 
      row_number() 
      over (order by time desc) as seqnum 
     from mytable where id=':id') 
al where seqnum <= 2 

により、顧客の最後の2つの操作を取得しています。しかし、今私はこれらの2つの操作の参照値を比較する必要があります。

mytableは:ように

id | name | referance | time | 
------------------------------------- 
11 | abc | 4589  | 09:05 | 
11 | abc | 1234  | 09:04 | 
10 | xyz | 0185  | 09:02 | 
15 | qpr | 9564  | 08:54 | 

...

繰り返しますが、私は= 11、IDと最後の2行を取得することができます。そして、すべての列が(null)でなければ、文字通り私が望むものである "true"を返しています。 また、その照会が同じかどうかを比較したいと思います。クエリを呼び出すと、 "true"または "false"を返す必要があります。

ありがとうございます。

P.S.私は実際には便利な機能やアイディアが必要です。

select table1.id, 
     table1.referance, 
     table2.id, 
     table2.referance 
from (select id, 
      referance, 
      row_number() 
      over (order by time desc) as seqnum 
     from mytable where id=':id') table1 
     inner join (select id, 
         referance, 
         row_number() 
         over (order by time desc) as seqnum 
        from mytable where id=':id') table2 
     on table1.referance != table2.referance 
al where seqnum <= 2 order by seqnum 
+0

回答を読むときに混乱を避けるために、あなたの「参照」のスペルが間違っていることに注意してください。これはおそらくテーブル作成スクリプトの間違いですが、後であなたをトリップする可能性があります... –

答えて

1

idの上に現在のクエリを集計し、二つの基準値が同じかしないかのかどうかを確認:私はすでに参加し、それを管理couldntのインナーを使用しようとしました。

select 
    id, 
    case when count(distinct reference) = 1 
     then 'true' else 'false' end as result 
from 
(
    select id, reference, 
     row_number() over (order by time desc) as seqnum 
    from table 
    where id=':id' 
) al 
where seqnum <= 2 
group by id; 

二つのレコードを超えるreferenceの個別のカウントが1ことがあれば、それは彼らが同じ値を持っていることを意味します。それ以外の場合は、値が異なるとみなすことができます。

1

なぜrow_nubmer()を使用していますか?

select (case when min(reference) <> max(reference) then 'false' 
      else 'true' 
     end) as is_same 
from (select top 2 id, referance 
     from mytable 
     where id=':id' 
     order by time desc 
    ) t; 

注:これらは同じ使用して集約されている場合は、その後、判断でき

select top 2 id, referance 
from mytable 
where id=':id' 
order by time desc; 

:あなたはと最後の2行を取得することができます。これは、考慮にreferenceためNULL値を取ることはありませんが、ロジックに容易に組み込むことができます。

関連する問題