【发布时间】:2015-01-11 15:31:52
【问题描述】:
选择价格最高上涨时间的最有效方法是什么? [底部结构]
-- 获得最高涨价
select p1.pricetime, max(p2.price) maxnext
from prices p1 inner join prices p2 on p2.id > p1.id
group by p1.pricetime
什么是 p2.pricetime,其中每个 p1.pricetime 的 p2.price = max(p2.price)?
-- 获取最高价格的时间
select p3.pricetime, x.maxnext
from prices p3 inner join
(select p1.pricetime, max(p2.price) maxnext
from prices p1 inner join prices p2 on p2.id > p1.id
group by p1.pricetime) x
on x.maxnext = p3.price and p3.id > p1.id
对于数百万行表来说,这是一种非常低效的方法 我相信你可以在 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 ...
哪个从子查询外部访问子查询别名?
--结构:
CREATE TABLE `prices` (
`id` int(11) NOT NULL DEFAULT '0',
`pricetime` varchar(19) DEFAULT NULL,
`price` decimal(10,8) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
LOCK TABLES `prices` WRITE;
/*!40000 ALTER TABLE `prices` DISABLE KEYS */;
INSERT INTO `prices` (`id`, `pricetime`, `price`)
VALUES
(1,'2014-01-01 21:55:00',1.37622000),
(2,'2014-01-01 21:56:00',1.37616000),
(3,'2014-01-01 21:57:00',1.37616000),
(4,'2014-01-01 21:58:00',1.37498000),
(5,'2014-01-01 21:59:00',1.37529000),
(6,'2014-01-01 22:03:00',1.37518000),
(7,'2014-01-01 22:05:00',1.37542000),
(8,'2014-01-01 22:06:00',1.37558000),
(9,'2014-01-01 22:07:00',1.37560000),
(10,'2014-01-01 22:08:00',1.37560000);
/*!40000 ALTER TABLE `prices` ENABLE KEYS */;
UNLOCK TABLES;
【问题讨论】:
-
想要的结果是什么?
-
什么是 p2.pricetime,其中每个 p1.pricetime 的 p2.price = max(p2.price)?
标签: mysql sql correlated-subquery