Здравствуйте, WolfHound, Вы писали:
WH>WH>select *
WH>from
WH>(
WH> select point, pid, [value]
WH> from ValInt
WH> where (point in (select point from points where uid=46 and point<=100000))
WH>)a
WH>where
WH>(
WH> point in
WH> (
WH> select max(point)
WH> from
WH> (
WH> select point, pid
WH> from ValInt
WH> where (point in (select point from points where uid=46 and point<=100000))
WH> )b
WH> where b.pid = a.pid
WH> )
WH>)
WH>and (pid in (20,145,555,9834,876235))
WH>
WH>Но это медленно. И что самое противное время растет с увеличением размера базы.
WH>А когда много pid'ов план запроса превращается в страшного мутанта
Не совсем понял, что нужно получить, но судя по запросу догадываюсь что нужен group by.
Примерно так:
select ValInt.*
from
ValInt inner join
(
select max(point) as point, pid
from ValInt inner join points on ValInt.point=points.point
where points.uid=46 and points.point<=100000 and ValInt.pid in (20,145,555,9834,876235)
group by pid
) a on ValInt.point=a.point and ValInt.pid=a.pid