現在、サーバー上のデータ処理を監視するソフトウェアの構築に取り組んでいます。特定のシステムの「現在の処理日」が何であるかを判断できるクエリを作成しようとしています。最初に最も古い失敗が何であるかを判断し、次にその直前の日付を取得することで、これを達成しようとしています。
私が抱えている問題は、サブクエリ (結合された他のテーブルの 1 つのエイリアスを参照する) が WHERE 句で間違った ID を渡しているように見えることです。
私が書いたクエリは次のとおりです。
select
t.team_name as team,
c.client_name as client,
c.client_id as cid,
p.pvl_name as pvl,
p.pvl_id as pid,
f.feeder as feeder,
coalesce((
select to_char( to_timestamp(status_date)::timestamp, 'mm/dd/yyyy' )
from database1.status
where
status_date < (
select status_date
from database1.status
where
status_date not in (
select status_date
from database1.status
where
process_step_id = 5
and process_state_id = 5
and pvl_id = p.pvl_id
and status_date is not null
)
and pvl_id = p.pvl_id
order by status_date
limit 1
)
and pvl_id = p.pvl_id
limit 1
), '--------------' ) as through_date
from
database1.client c
join
database1.pvl p on c.client_id = p.client_id
left join (
select child_pvl_id, count(child_pvl_id) as feeder
from database1.relation
group by child_pvl_id
) f on f.child_pvl_id = p.pvl_id
join
database1.team t on c.team_id = t.team_id
where c.team_id = 1
order by c.client_name, f.feeder desc
For the first system, it always returns the 'through_date' as 03/16/2013, even though the correct date should be 03/21/2013. I have tried pulling out the subquery and replacing 'p.pvl_id' with an actual pvl_id, and it works correctly, it only seems to function erroneously when it is in a subquery using 'p.pvl_id'