mysql相关子查询:选择字段1,其中最大值(字段2)

mysql相关子查询:选择字段1,其中最大值(字段2),mysql,sql,correlated-subquery,Mysql,Sql,Correlated Subquery,选择价格增加最大值的时间最有效的方法是什么? [底部结构] -获得最高提价 p2.pricetime是什么,其中p2.price=maxp2.price代表每个p1.pricetime -获得最高价格的时间 对于数百万行表来说,这是一种效率极低的方法 我相信您可以在MSSQL中执行类似的操作: select p2.pricetime from (select p1.pricetime, max(p2.price) maxnext from prices p1 inner join prices

选择价格增加最大值的时间最有效的方法是什么? [底部结构]

-获得最高提价


p2.pricetime是什么,其中p2.price=maxp2.price代表每个p1.pricetime

-获得最高价格的时间

对于数百万行表来说,这是一种效率极低的方法 我相信您可以在MSSQL中执行类似的操作:

select p2.pricetime from 
(select p1.pricetime, max(p2.price) maxnext
from prices p1 inner join prices p2 on p2.id > p1.id
group by p1.pricetime) x ...
哪个从子查询外部访问子查询别名

-结构:


我猜这是您想要获得下一个价格的查询:

select p.*,
       (select p2.price
        from prices p2
        where p2.id > p.id
        order by p2.id
        limit 1
       ) as nextprice
from prices p;
要获得最大更改,您可以执行以下操作:

select p.*,
       (select p2.price
        from prices p2
        where p2.id > p.id
        order by p2.id
        limit 1
       ) as nextprice
from prices p
order by nextprice - price desc
limit 1;
对于性能,您需要一个关于pricesid、price的索引

最有效的方法是假设ID是连续的,并且没有间隙。在这种情况下,自联接最好:

select p.*, pnext.price
from prices p join
     prices pnext
     on p.id = pnext.id - 1
order by pnext.price - p.price desc
limit 1;

谢谢Gordon,当我问这个问题时,stackoverflow建议将相关子查询作为标记。答案就在这里。下面是:

最大增加时间:

SELECT p1.pricetime starttime, min(p4.pricetime) endtime, 
p1.price startingprice, p4.price maxnextprice
FROM prices p1 inner join prices p4 on p4.id > p1.id
WHERE p4.price = 
(SELECT max(p3.price) 
FROM prices p2 inner join prices p3 on p3.id > p2.id 
where p1.id = p2.id 
group by p2.pricetime order by max(p3.price) limit 1)
group by p1.pricetime, p4.price;

感谢您的输入。

希望得到什么结果?p2.pricetime是什么,其中p2.price=maxp2.price对应于每个p1.pricetime?
select p.*,
       (select p2.price
        from prices p2
        where p2.id > p.id
        order by p2.id
        limit 1
       ) as nextprice
from prices p
order by nextprice - price desc
limit 1;
select p.*, pnext.price
from prices p join
     prices pnext
     on p.id = pnext.id - 1
order by pnext.price - p.price desc
limit 1;
SELECT p1.pricetime starttime, min(p4.pricetime) endtime, 
p1.price startingprice, p4.price maxnextprice
FROM prices p1 inner join prices p4 on p4.id > p1.id
WHERE p4.price = 
(SELECT max(p3.price) 
FROM prices p2 inner join prices p3 on p3.id > p2.id 
where p1.id = p2.id 
group by p2.pricetime order by max(p3.price) limit 1)
group by p1.pricetime, p4.price;