with TEMP_1 as ( select Projects, `Role` as `Function`, `Action` as Task, `Hours`, substr(str_to_date(date_format(`Date`, '%Y/%m/%d'), '%Y/%m/%d'), 1, 7) as `Date`, substr(str_to_date(date_format(`Date`, '%Y/%m/%d'), '%Y/%m/%d'), 1, 4) as `Date_Year`, substr(str_to_date(date_format(`Date`, '%Y/%m/%d'), '%Y/%m/%d'), 6, 2) as `Date_Month` from ( select distinct real_name as `Name`, Project as Projects, `Action`, `CODE` as `Role`, `Comment`, date_format(`Date`, '%Y/%c/%e') as `Date`, Hours from ( select * from DSC.timeRecord_history where Hours > 0) A_1 join ( select * from DSC.V_user_role where ROLE_ID in('3','4','5','6','7','8','9')) A_2 using(user_id) join ( select ID as ROLE_ID, `CODE` from DSC.core_role) A_3 using(ROLE_ID)) A_4 ) select * from TEMP_1 where `Date` is not null ;以上sql语句的执行顺序是什么?
时间: 2024-04-07 22:29:58 浏览: 57
这是一个SQL查询语句,查询的是一张表。语句中使用了多个操作和函数,它们的执行顺序如下:
1. 首先,从表DSC.timeRecord_history中选取Hours大于0的记录,并将其作为A_1表。
2. 然后,从表DSC.V_user_role中选取ROLE_ID为3、4、5、6、7、8、9的记录,并将其作为A_2表。
3. 接着,将A_1表和A_2表连接,连接条件是它们都有相同的user_id。
4. 再将连接得到的表与表DSC.core_role连接,连接条件是它们都有相同的ROLE_ID。
5. 最后,将所有连接得到的记录作为A_4表,并选取其中的real_name、Project、Action、CODE、Comment、Date和Hours这些字段,将它们分别命名为Name、Projects、Function、Task、Hours、Date、Date_Year和Date_Month。这些字段都来自于A_4表。
6. 将A_4表中的Date字段转换为YYYY/MM/DD格式,并将其分别提取出来作为Date、Date_Year和Date_Month字段。
7. 将所有字段都选出来,放到一个名为TEMP_1的临时表中。
8. 最后,从TEMP_1表中选取所有Date字段不为空的记录,并将它们作为结果返回。
阅读全文