#sql #snowflake-cloud-data-platform #snowflake-schema
Вопрос:
Я пытаюсь выполнить этот запрос в Snowflake, но продолжаю получать сообщение об ошибке.
select x.*, (select z.status from TBLA z where z.number_id=x.number_id and z.country=x.country and z.datetime=x.datetime) status
from
(
select a.number_id, a.country, max(datetime) as datetime
from TBLA a
group by a.number_id, a.country
) x
Это ошибка, которую я получаю:
SQL compilation error: Unsupported subquery type cannot be evaluated
Кто-нибудь знает, как это исправить?
Комментарии:
1. Есть ли причина использовать подзапрос для статуса, а не просто присоединять TBLA к таблице x?
Ответ №1:
Чтобы получить статус для последней даты и времени для number_id / country, можно использовать оконную функцию:
SELECT a.*,
(ARRAY_AGG(a.status) WITHIN GROUP(ORDER BY a.datetime DESC)
OVER(PARTITION BY a.number_id, a.country))[0] AS latest_status
FROM TBLA a;
Ответ №2:
Похоже, вы пытаетесь получить последний статус по number_id и country. Простой запрос для выполнения этого в Snowflake с использованием оконной функции row_number()
select * from TBLA
qualify row_number() over (partition by number_id, country order by datetime desc) = 1;
Ответ №3:
В SELECT разрешены только скалярные подзапросы. Ваш подзапрос по своей сути не является скалярным.
https://docs.snowflake.com/en/user-guide/querying-subqueries.html