select * from ( select a.*,b.mon_rank from wwx1249869.pr01_temp_p3_ntr_grid_new_w23063001__de a left join ( select month,row_number () over (order by month desc) as mon_rank from (select month from wwx1249869.pr01_temp_p3_ntr_grid_new_w23063001__de group by month) bb ) b using (month)) c where mon_rank>=1 and mon_rank<=1 /*参数化*/ 解析
时间: 2024-04-18 21:33:17 浏览: 81
这个查询语句主要是对两个表进行左连接,并使用窗口函数对其中一个表进行排序并添加一个名为mon_rank的列。然后使用嵌套查询将连接结果作为子查询,并在外部查询中使用mon_rank进行筛选。
具体解析如下:
1. 内层子查询:
- 子查询 `select month from wwx1249869.pr01_temp_p3_ntr_grid_new_w23063001__de group by month` 从表 `wwx1249869.pr01_temp_p3_ntr_grid_new_w23063001__de` 中获取不重复的月份数据。
- 子查询 `select month, row_number() over (order by month desc) as mon_rank from (...) bb` 对上一步查询结果进行排序,按降序给每个月份分配一个排名(mon_rank)。
- 将子查询结果命名为表别名b,其中包含两列:month和mon_rank。
2. 外层查询:
- 表别名a代表表 `wwx1249869.pr01_temp_p3_ntr_grid_new_w23063001__de`。
- 使用左连接 `left join` 将表a与表别名b连接,连接条件为 `using (month)`,即使用month列进行连接。
- 将连接结果命名为表别名c,包含表a的所有列以及mon_rank列。
3. 筛选条件:
- 在表别名c上应用筛选条件 `where mon_rank>=1 and mon_rank<=1`,此处参数化注释可能是用于提醒查询的使用者在这里传入参数进行筛选,但实际上筛选条件将始终返回mon_rank等于1的结果。
总结:该查询语句的目的是获取表 `wwx1249869.pr01_temp_p3_ntr_grid_new_w23063001__de` 中月份最大的一条记录,并将该记录与其他列数据进行连接。
阅读全文