我有一个数据集正在由客户在每个操作maden上更新。 例如,我通过
获得客户的最后两个操作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
来自功能文件。但现在我需要比较这两个操作的参考值。
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.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
上汇总当前查询,并检查两个参考值是否相同。
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 :(得分: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;
注意:这不会将NULL
的{{1}}值考虑在内,但这很容易纳入逻辑中。