у меня есть таблица "hadoop_table", которую я хочу взять из нее самую последнюю цену предмета, если он относится к типу участия, когда я попробовал этот запрос
SELECT item_id ,max(IF(type = 'participate', struct(timestamp, price), 0 )).col2 AS latest_price FROM hadoop_table group by item_id ;
я получаю эту ошибку:
FAILED: SemanticException [Error 10016]: Line 1:74 Argument type mismatch '0': The second and the third arguments of function IF should have the same type, but they are different: "struct<col1:bigint,col2:double>" and "int" (state=42000,code=10016)
поэтому я изменяю запрос на
SELECT item_id ,max(IF(type = 'participate', struct(timestamp, price), struct(0,0) )).col2 AS latest_price FROM hadoop_table group by item_id ;
как мне принять последнее значение цены просто типа = участвовать в более чистом стиле? потому что этот запрос не очень читабелен и понятен? есть ли встроенный IF для структуры в HQL?
пример даты:
+-----------------+--------------+----------------------------+--------------+
| timestamp | price | item_id | type |
+-----------------+--------------+----------------------------+--------------+
| 15533 | 499.0 | LABANKDWR | participate |
| 44533 | 599.0 | LABANKDWR |No_participate|
| 999999 | 699.0 | ddddddddddddd | participate |
+-----------------+--------------+----------------------------+--------------+
ожидаемый результат:
+-----------------+-----------------------+
| | price | item_id |
+-----------------+-----------------------+
| 499.0 | LABANKDWR |
| 699.0 | ddddddddddddd |
+-----------------+--------------+--------+