Comment comparer les valeurs de colonne de deux dernières lignes spécifiées insérées dans la même table?

J'ai un set de données qui est mis à jour sur chaque opération faite par les clients. Par exemple, je reçois les deux dernières opérations d'un client par

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 

id provient d'un file de caractéristiques. Mais maintenant je dois comparer les valeurs de reference de ces deux opérations.

ma table:

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

bientôt…

Encore une fois, je peux get les deux dernières lignes avec id = 11; et, dans la mesure où toutes les colonnes ne sont pas nulles, il returnne "vrai", ce que je veux littéralement. Mais j'aimerais aussi comparer si leurs references sont identiques ou non; et, quand j'appelle la requête, il doit returnner "vrai" ou "faux".

Merci d'avance

PS J'ai juste besoin d'une fonction ou d'une idée utile. J'ai déjà essayé d'utiliser la jointure interne mais je ne pouvais pas le gérer:

 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 

Agréger votre requête actuelle sur l' id et vérifier si les deux valeurs de reference sont identiques ou non.

 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; 

Si le nombre de reference distinct sur les deux loggings est 1 cela implique qu'ils ont la même valeur. Sinon, nous pouvons supposer que les valeurs sont différentes.

Pourquoi utilisez-vous row_nubmer() ? Vous pouvez get les deux dernières lignes comme suit:

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

Vous pouvez ensuite déterminer si elles sont identiques en utilisant l'agrégation:

 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; 

Note: Cela ne prend pas en count les valeurs NULL pour la reference , mais cela est facilement incorporé dans la logique.