Как правильно использовать чехол в SQL - PullRequest
0 голосов
/ 27 января 2020

Я получаю небольшую ошибку со следующим SQL кодом, причину которого я не понимаю.

Я использую AWS Афина.

SELECT 
    icustay_id, 
    itemid, 
    date_diff('second', TIMESTAMP '1970-01-01 00:00:00', starttime) AS starttime, 
    date_diff('second', TIMESTAMP '1970-01-01 00:00:00', endtime) AS endtime,
    CASE WHEN itemid IN (30120,221906,30047) AND rateuom='mcg/kg/min' THEN CAST(rate AS DECIMAL(10,3))
FROM mimiciii.inputevents_mv
WHERE itemid IN (30128,30120,30051,221749,221906,30119,30047,30127,221289,222315,221662,30043,30307) 
ORDER BY icustay_id, itemid, starttime

Подписан это ошибка.

Произошла ошибка (InvalidRequestException) при вызове операции StartQueryExecution: строка 2: 1: посторонний ввод 'case' ожидающий {, ',', 'FROM', 'WHERE', 'GROUP', 'ORDER', 'HAVING', 'LIMIT', 'UNION', 'EXCEPT', 'INTERSECT'} невозможно откатить

1 Ответ

1 голос
/ 27 января 2020

Синтаксис для Выражение регистра :

CASE
WHEN boolean condition THEN result
[WHEN ...]
[ELSE result]
END

В вашем операторе выбора отсутствует END. просто добавьте ключевое слово END после условия then, как показано в запросе ниже. Должно работать нормально.

query_vaso_mv = """
select icustay_id, itemid, date_diff('second', timestamp '1970-01-01 00:00:00', starttime) as starttime, date_diff('second', timestamp '1970-01-01 00:00:00', endtime) as endtime,
case when itemid in (30120,221906,30047) and rateuom='mcg/kg/min' then cast(rate as DECIMAL(10,3)) end 
from mimiciii.inputevents_mv
where itemid in (30128,30120,30051,221749,221906,30119,30047,30127,221289,222315,221662,30043,30307) 
order by icustay_id, itemid, starttime
"""
...