Возможно добавлять фиктивную колонну во время реализации одного select
в SQL Redshift?
Я делаю консультацию в таблицу системы (конкретно, в stv_wlm_query_state
) и, если поле exec_time
больше 4 часов, должна появляться в вышеупомянутой колонне стоимость WARNING, и если он больше 8 часов, стоимость должен быть CRITICAL.
Возможно?
Таблица раньше упомянутая, он содержит следующие поля:
xid task query service_class slot_count wlm_start_time state queue_time exec_time
.
Любая линия результата была бы:
58992537 1262584 1269123 8 1 2019-03-20 06:53:18 Returning 0 2129442104
.
Я нуждаюсь в том, чтобы добавить эту "виртуальную" колонну, названную например "Оценка", контент которой будет зависеть от стоимости exec_time. Если этот больше четырех часов, должна выходить в этой виртуальной колонне стоимость WARNING; в случае когда он больше восьми, стоимость должен быть CRITICAL.
select, который я использую, - следующий:
select query as idquery,queue_time as tiempo_en_cola_microseg,exec_time as tiempo_ejecucion_microseg,(tiempo_en_cola_microseg+tiempo_ejecucion_microseg) as tiempo_total_microseg ,state as estado, mod(cast(floor(tiempo_total_microseg/3600000000) as integer),24) || ':' || mod(cast(floor(tiempo_total_microseg/60000000) as integer),60) || ':' || mod(cast(floor(tiempo_total_microseg/1000000) as integer),60) as duracion_hhmmss from stv_wlm_query_state where tiempo_total_microseg >= 14400000000;
Я добавил рекомендацию @PatricioMoracho использования CASE
во мне select
и оно я функционировало верно:
`case tiempo_total_microseg
when tiempo_total_microseg>28800000000
then 'CRITICAL' else 'WARNING'
end as situacion`
Продолжая указания @PatricioMoracho в комментариях моего вопроса, adjuntГ© один 'ЖЕНИТЕ WHEN, решая asГ - мою проблему.
Оставил в continuaciГіn ее soluciГіn:
select query as idquery,wlm_start_time as inicio,queue_time as
tiempo_en_cola_microseg,exec_time as tiempo_ejecucion_microseg,
(tiempo_en_cola_microseg+tiempo_ejecucion_microseg) as tiempo_total_microseg ,state as estado,
mod(cast(floor(tiempo_total_microseg/3600000000) as integer),24) || ':' ||
mod(cast(floor(tiempo_total_microseg/60000000) as integer),60) || ':' ||
mod(cast(floor(tiempo_total_microseg/1000000) as integer),60) as duracion_hhmmss,
case tiempo_total_microseg
when tiempo_total_microseg>28800000000
then 'CRITICAL' else 'WARNING'
end as situacion
from stv_wlm_query_state
where tiempo_total_microseg >= 14400000000
order by duracion_hhmmss;