我目前正在运行以下 SQL小提琴
并试图使以下内容成为现实:
我只希望这组cats
具有last_checked
任意时间的值并且是sick
. 为了讨论,让我们现在减 12 小时。( sysdate - Interval '12' hour
)。我得到的cat
是last_checked
11 小时前cat
的情况,但现在他不再生病了。如何以忽略旧sick
条目而只关注新healthy
状态的方式构建查询?我的意思是忽略这个结果,因为猫不再生病。
问题
那么......你想要最近的状态,不管是那些在给定时间范围内生病的猫的最近状态,还是只有健康的猫?
如果它是最新的(最大)并且状态也是 ,我只希望将状态返回给我sick
。在小提琴中,它将显示一个我不希望发生的示例,它将返回带有时间戳的生病状态,11 hours ago
但有一个更新的时间戳。
更新
以下功能:
select cat_id, last_checked, sick
from
(
select cat_id, last_checked, sick,
ROW_NUMBER() over (partition by cat_id order by last_checked desc) rn
from cats
where last_checked >= sysdate- INTERVAL '12' hour
) v
where rn = 1
and sick = 1;
@podiluska 提供的仅检索第一个结果。我需要它在cat
基础cat
上。
第二次更新
Podiluska提供的解决方案:
select cat_id, last_checked, sick
from
(
select cat_id, last_checked, sick,
ROW_NUMBER() over (partition by cat_id order by last_checked desc) rn
from cats
where last_checked >= sysdate- INTERVAL '12' hour
) v
where rn = 1;
将适用于小型数据集。接受的答案(我使用的那个)将最有效地处理大型数据集。