現在、次のSQLフィドルを実行しています
そして、次のことを真にしようとしています:
任意の時間の値をcats
持ち、である のセットのみが必要です。議論のために、マイナス 12 時間にしましょう。( )。私が戻ってきたのは11時間前のことですが、それは彼がもう病気ではないというより最近の状態です. 古いエントリを無視し、新しいステータスだけに関心を持つようにクエリを作成するにはどうすればよいですか? つまり、猫はもう病気ではないので、この結果を無視するということです。last_checked
sick
sysdate - Interval '12' hour
cat
last_checked
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
。
2 回目の更新
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;
小さなデータセットで動作します。受け入れられた回答(私が使用したもの)は、大規模なデータセットで最も効果的に機能します。