酷代码 AI
菜单
全部AI  /  热门  /  AI写代码神器
服务商

select distinct t.id_card,t.`start`,t.`end` from ((select distinct(person_name), id_card , date_format( curdate(), "%y-%m-%d 00:00:00" ) start , date_format( curdate(), "%y-%m-%d 23:59:59" ) end, '1' ordertype, '-1' pass from t_contractor_people where person_name in ( select distinct ( b.executor ) from t_task_work_order a left join t_task_work_person b on a.sheet_id = b.hot_work_id where a.valid = '1' and a.work_start_time > date_format( curdate(), "%y-%m-%d 00:00:00

看来你在处理一个SQL查询问题,涉及到从多个表中提取特定时间段内的人员信息。这里是一个优化过的版本: ```sql SELECT DISTINCT t.id_card, t.start, t.end FROM ( SELECT DISTINCT(person_name), id_card, DATE_FORMAT(CURDATE(), '%Y-%m-%d 00:00:00') AS start, DATE_FORMAT(CURDATE(), '%Y-%m-%d 23:59:59') AS end, '1' AS ordertype, '-1' AS pass FROM t_contractor_people WHERE person_name IN ( SELECT DISTINCT b.executor FROM t_task_work_order a LEFT JOIN t_task_work_person b ON a.sheet_id = b.hot_work_id WHERE a.valid = '1' AND a.work_start_time > DATE_FORMAT(CURDATE(), '%Y-%m-%d 00:00:00') ) ) t; ``` 需要注意的逻辑点: 1. 日期格式:确保 `CURDATE()` 返回的日期格式与表中的日期格式一致,避免因格式不匹配导致查询失败。 2. 性能优化:如果 `t_task_work_order` 和 `t_task_work_person` 表的数据量较大,可以考虑在 `a.valid` 和 `a.work_start_time` 上创建索引,以提高查询性能。 3. 子查询优化:如果子查询返回的结果集较大,可以尝试将子查询结果缓存到临时表中,再进行主查询,以减少重复计算。 [2024-12-05 12:31:57 | AI写代码神器 | 342点数解答]

相关提问