尝试嵌套查询时出现mysql工作台错误

bfrts1fy  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(291)

我正在使用mysql workbench 8.0。我正在尝试为下面正在工作的查询实现一个嵌套查询。我试图避免使用createtable命令。但是,它显示错误。(对于此服务器版本,select在此位置无效,应为“(”,with)
可执行查询为

  1. create table recent as
  2. select f.member_id,f.fill_date,f.insurancepaid,
  3. p.member_first_name,p.member_last_name,d.drug_name,
  4. row_number() over (partition by p.member_id order by f.fill_date desc) as flag
  5. from fact_member_drug f
  6. left join dimension_drug_name p
  7. on f.member_id = p.member_id
  8. left join dim_drugdetail_table d
  9. on f.drug_ndc = d.drug_ndc;
  10. select member_id,member_first_name,member_last_name,drug_name,fill_date,insurancepaid
  11. from recent where flag = 1;

我写的问题是

  1. select sub.member_id,sub.member_first_name,sub.member_last_name,sub.drug_name,sub.fill_date,sub.insurancepaid
  2. from (
  3. select f.member_id,f.fill_date,f.insurancepaid,
  4. p.member_first_name,p.member_last_name,d.drug_name,
  5. row_number() over (partition by p.member_id order by f.fill_date desc) as flag
  6. from fact_member_drug f
  7. left join dimension_member p
  8. on f.member_id = p.member_id
  9. left join dimension_drug_name d
  10. on f.drug_ndc = d.drug_ndc;
  11. ) as sub
  12. where sub.flag = 1;

请帮忙我做错什么了。
谢谢

sulc1iza

sulc1iza1#

你可以像下面这样试试

  1. with cte as
  2. (
  3. select f.member_id,f.fill_date,f.insurancepaid,
  4. p.member_first_name,p.member_last_name,d.drug_name,
  5. row_number() over (partition by p.member_id order by f.fill_date desc) as flag
  6. from fact_member_drug f
  7. left join dimension_drug_name p
  8. on f.member_id = p.member_id
  9. left join dim_drugdetail_table d
  10. on f.drug_ndc = d.drug_ndc
  11. ) select * from cte where flag=1

从查询中去掉分号

  1. select sub.member_id,sub.member_first_name,sub.member_last_name,sub.drug_name,sub.fill_date,sub.insurancepaid
  2. from (
  3. select f.member_id,f.fill_date,f.insurancepaid,
  4. p.member_first_name,p.member_last_name,d.drug_name,
  5. row_number() over (partition by p.member_id order by f.fill_date desc) as flag
  6. from fact_member_drug f
  7. left join dimension_member p
  8. on f.member_id = p.member_id
  9. left join dimension_drug_name d
  10. on f.drug_ndc = d.drug_ndc // just remove semicolon
  11. ) as sub
  12. where sub.flag = 1
展开查看全部

相关问题