- 论坛徽章:
- 0
|
原帖由 col.g 于 2008-2-28 22:43 发表 ![]()
用一个INNER JOIN实现,每次只找当前值和最大值及对应的日期,或者只找出当前值和最小值及对应的日期
类似于三楼的解决方法
要达到四楼的效果查询太复杂了,起码目前对我是这样。因此一步一步来吧,分步查 ...
如果要优化的话就加设当的索引。
create index f_u on table_name(work_id,prod_num);
explain
select a.work_id,a.prod_date as max_date,a.prod_num as max_num,b.prod_date as min_date,b.prod_num as min_num
from (select * from table_name as a where a.prod_num = (select max(prod_num) from table_name where work_id = a.work_id
)) as a,(select * from table_name as a where a.prod_num = (select min(prod_num) from table_name where work_id = a.work_id )) as b where a.work_id = b.work_id;
explain
SELECT a.work_id, a.prod_date AS min_prod_dat, c.min_prod_num, b.prod_date AS max_prod_dat, c.max_prod_num
FROM (
SELECT work_id, min( prod_num ) AS min_prod_num, max( prod_num ) AS max_prod_num
FROM table_name
GROUP BY work_id
)c
JOIN table_name a ON a.work_id = c.work_id
AND a.prod_num = c.min_prod_num
JOIN table_name b ON b.work_id = c.work_id
AND b.prod_num = c.max_prod_num |
|
|