MYSQL Workbench Ошибка при попытке вложенного запроса - PullRequest
0 голосов
/ 14 декабря 2018

Я использую MySQL Workbench 8.0.Я пытаюсь реализовать вложенный запрос для следующего запроса, который работает.Я пытаюсь избежать команды создания таблицы.Однако это показывает ошибку. (В этой позиции для этой версии сервера выбор недействителен, ожидая '(', с)

Исполняемый запрос:

create table recent as
select f.member_id,f.fill_date,f.insurancepaid, 
p.member_first_name,p.member_last_name,d.drug_name,
row_number() over (partition by p.member_id order by f.fill_date desc) as flag
from fact_member_drug f 
left join dimension_drug_name p 
on f.member_id = p.member_id 
left join dim_drugdetail_table d 
on f.drug_ndc = d.drug_ndc;

select member_id,member_first_name,member_last_name,drug_name,fill_date,insurancepaid 
from recent where flag = 1;

Запрос, который янаписал

select sub.member_id,sub.member_first_name,sub.member_last_name,sub.drug_name,sub.fill_date,sub.insurancepaid 
from (
    select f.member_id,f.fill_date,f.insurancepaid, 
    p.member_first_name,p.member_last_name,d.drug_name,
    row_number() over (partition by p.member_id order by f.fill_date desc) as flag
    from fact_member_drug f 
    left join dimension_member p 
    on f.member_id = p.member_id 
    left join dimension_drug_name d 
    on f.drug_ndc = d.drug_ndc;
) as sub
where sub.flag = 1;

Пожалуйста, помогите, что я делаю не так.

Спасибо

1 Ответ

0 голосов
/ 14 декабря 2018

вы можете попробовать как показано ниже

   with cte as
   ( 
    select f.member_id,f.fill_date,f.insurancepaid, 
    p.member_first_name,p.member_last_name,d.drug_name,
    row_number() over (partition by p.member_id order by f.fill_date desc) as flag
    from fact_member_drug f 
    left join dimension_drug_name p 
    on f.member_id = p.member_id 
    left join dim_drugdetail_table d 
    on f.drug_ndc = d.drug_ndc
 )  select * from cte where flag=1

из вашего запроса просто удалите точку с запятой

select sub.member_id,sub.member_first_name,sub.member_last_name,sub.drug_name,sub.fill_date,sub.insurancepaid 
from (
    select f.member_id,f.fill_date,f.insurancepaid, 
    p.member_first_name,p.member_last_name,d.drug_name,
    row_number() over (partition by p.member_id order by f.fill_date desc) as flag
    from fact_member_drug f 
    left join dimension_member p 
    on f.member_id = p.member_id 
    left join dimension_drug_name d 
    on f.drug_ndc = d.drug_ndc // just remove semicolon
) as sub
where sub.flag = 1
...