2017-10-30 6 views
1

고객이 수행 한 각 작업마다 업데이트되는 데이터 세트가 있습니다. id이 기능을 파일에서 점점된다 예를 들어, 나는동일한 테이블에 마지막으로 삽입 된 두 개의 행의 열 값을 비교하는 방법은 무엇입니까?

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 

하여 고객의 마지막 두 작업을 얻고있다. 하지만 이제는이 두 작업의 참조 값을 비교해야합니다.

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 | 

... 다시

, 내가 ID로 마지막 두 행을 얻을 수 = 11; 그리고 모든 열이 (null)이 아닌 한, 그것은 내가 "문자 그대로"원하는 "true"를 반환하고 있습니다. 그러나 그들의 추천이 동일하거나 아닌지 비교하고 싶습니다. 쿼리를 호출하면 "true"또는 "false"를 반환해야합니다.

미리 감사드립니다.

P. 사실은 유용한 기능이나 아이디어가 필요합니다. 이미 내부 조인을 사용하려고하지만 couldnt는 그것을 관리했습니다

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을 통해 두 참조 값이 동일 여부를 수 있는지 확인하세요. 두 기록을 통해 reference의 고유 한 카운트가 1 될 경우

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; 

는 그들이 같은 값을 가지고 있음을 의미한다. 그렇지 않으면 값이 다른 것으로 가정 할 수 있습니다.

1

row_nubmer()을 사용하고 있습니까? 당신은 마지막 두 행으로 얻을 수 있습니다 :

select top 2 id, referance 
from mytable 
where id=':id' 
order by time desc; 
이이 같은 사용하여 집계하는 경우 다음 확인할 수 있습니다

:

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; 

참고 :이 계정에 reference에 대한 NULL 값을 고려하지 않고 이는 로직에 쉽게 통합됩니다.