如何编写更高效的mysql:选择包含最大日期的记录何时按代码分组



使用显示创建表结构;

CREATE TABLE `quote` (
`id` int(8) unsigned NOT NULL AUTO_INCREMENT,
`code` text COLLATE utf8mb4_unicode_ci,
`date` date DEFAULT NULL,
`open` double DEFAULT NULL,
`high` double DEFAULT NULL,
`low` double DEFAULT NULL,
`close` double DEFAULT NULL,
`volume` bigint(15) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=17449887 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci 

每个代码组都有不同的最大值(日期(,选择代码及其最大值(时间(:

select code,max(date) as date from quote group by code;

我想获得按代码分组的记录,其代码组和其他列的值中的日期为max(date(。

create table b SELECT code,max(date) as date from quote group by code ;
select * from quote as a , b where a.code = b.code and a.date = b.date;

效率极低,如何写一个新的高效mysql代码?

您似乎在问很多问题。加快查询速度:

SELECT code, MAX(date) AS date FROM quote GROUP BY code;

你想要这个索引:

CREATE INDEX idx ON quote (code, date);

我怀疑您想到的第二个查询是试图查找每个代码的最长日期记录。这个查询可能看起来像:

SELECT q1.*
FROM quote q1
INNER JOIN
(
SELECT code, MAX(date) AS max_date
FROM quote
GROUP BY code
) q2
ON q2.code = q1.code AND
q2.max_date = q1.date;

上面建议的相同索引也应该有助于此版本的查询。

最新更新