从一堆数据中,查出最近一段时间内最新的且值最大的5条数据,你有更好的办法吗?

cgcavalier518 2012-06-20 12:32:06
SELECT DISTINCT A.ID FROM TBL_FOO A where A._TIME >1340031599000 AND A._TIME=(SELECT MAX(_TIME) FROM TBL_FOO B WHERE B.ID =A.ID) order by A.VALUE DESC limit 5
...全文
242 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
cg284952814 2012-06-22
  • 打赏
  • 举报
回复
高手指点一下啊
ACMAIN_CHM 2012-06-22
  • 打赏
  • 举报
回复
(不要高估你的汉语表达能力或者我的汉语理解能力)
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html

1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)

这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。

ACMAIN_CHM 2012-06-22
  • 打赏
  • 举报
回复
参考下贴中的多种方法

http://blog.csdn.net/acmain_chm/article/details/4126306
[征集]分组取最大N条记录方法征集,及散分....
cgcavalier518 2012-06-22
  • 打赏
  • 举报
回复
查询语句,表数据要求支持百万以上
SELECT DISTINCT A.RESOURCE_ID AS _VALUE FROM TBL_PM_LUN20120619 A WHERE 1=(SELECT COUNT(RESOURCE_ID) FROM TBL_PM_LUN20120619 B WHERE B.RESOURCE_ID IN('b2d89dcee0ec4852851eaccd7b338d7c','ede6b70ef6074081bf86fe0d3c9e38f0') AND A.RESOURCE_ID=B.RESOURCE_ID AND A.INDECATED_TIME <= B.INDECATED_TIME AND B.INDECATED_TIME >=1340081999000 AND B.INDECATED_TIME <=1340089199000) order by A.UTILIZATION DESC limit 1
cgcavalier518 2012-06-22
  • 打赏
  • 举报
回复
CREATE TABLE `tbl_pm_lun20120619` (
`ID` bigint(20) NOT NULL auto_increment,
`RESOURCE_ID` varchar(50) collate utf8_bin NOT NULL,
`UTILIZATION` int(11) default '0',
`QUEUE_LENGTH` int(11) default '0',
`AVG_IO_RESPONSE_TIME` int(11) default '0',
`MAX_IO_RESPONSE_TIME` int(11) default '0',
`TOTAL_BANDWIDTH` int(11) default '0',
`READ_BANDWIDTH` int(11) default '0',
`WRITE_BANDWIDTH` int(11) default '0',
`TOTAL_IOPS` int(11) default '0',
`READ_IOPS` int(11) default '0',
`WRITE_IOPS` int(11) default '0',
`AVG_READ_IOSIZE` int(11) default '0',
`AVG_WRITE_IOSIZE` int(11) default '0',
`SERVICE_TIME` int(11) default '0',
`READ_CACHE_HIT` int(11) default '0',
`WRITE_CACHE_HIT` int(11) default '0',
`IS_AGGREGATED` tinyint(1) default NULL,
`INDECATED_TIME` bigint(20) NOT NULL,
`AGGREGATED_TIME` bigint(20) default NULL,
PRIMARY KEY (`ID`),
UNIQUE KEY `PK` (`ID`),
KEY `IDX_RESOURCE_ID` (`RESOURCE_ID`),
KEY `IDX_INDECATED_TIME` (`INDECATED_TIME`),
KEY `dddd` (`UTILIZATION`),
KEY `ewfwef` (`QUEUE_LENGTH`),
KEY `eeessfsdf` (`AVG_IO_RESPONSE_TIME`),
KEY `weweee` (`TOTAL_BANDWIDTH`),
KEY `seewfwfwefef` (`READ_BANDWIDTH`),
KEY `qwq` (`WRITE_BANDWIDTH`),
KEY `sdfsdfsdfdsf` (`TOTAL_IOPS`),
KEY `sweeweee` (`READ_IOPS`),
KEY `sweewewweewew` (`WRITE_IOPS`),
KEY `ssdfwefwefewfe` (`AVG_READ_IOSIZE`),
KEY `sfweweee` (`AVG_WRITE_IOSIZE`),
KEY `222222` (`SERVICE_TIME`),
KEY `sdfwefwefewfwef` (`READ_CACHE_HIT`),
KEY `445555` (`WRITE_CACHE_HIT`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
cgcavalier518 2012-06-21
  • 打赏
  • 举报
回复
建了索引速度确实非常快,但是如果要建索引的话,根据业务,一个表可能需要建接近20个索引(order by 很多指标项),一般索引个数不应该超过6个吧。如果达到20个左右了,会有什么影响?
cgcavalier518 2012-06-20
  • 打赏
  • 举报
回复
你看了我的建表语句,索引建得有问题吗?一个RESOURCE_ID可能有多个INDECATED_TIME,我就在RESOURCE_ID,INDECATED_TIME,ID列上加了索引,还请大虾指导指导。
WWWWA 2012-06-20
  • 打赏
  • 举报
回复
建立 索引
cgcavalier518 2012-06-20
  • 打赏
  • 举报
回复
我选取了你的一种方法,在数据小的情况下确实速度提升很多,但是数据量大的情况(可能达到百万级),速度还是不能另人满意。
WWWWA 2012-06-20
  • 打赏
  • 举报
回复
OR
参考
http://topic.csdn.net/u/20091231/16/2f268740-391e-40f2-a15e-f243b2c925ab.html?88754
中的方法
WWWWA 2012-06-20
  • 打赏
  • 举报
回复
贴建表及插入记录的SQL,及要求结果出来看看

要SQL语句
cgcavalier518 2012-06-20
  • 打赏
  • 举报
回复
你想要数据吗?257 60c0a33e7f454e52b4174339e520a7e0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1340130171000
227 b234cd0694954ba895f605eda2990433 0 0 0 7 0 0 0 0 0 0 0 0 0 0 0 1340130171000
类似的这样的了,第一列是自增ID
WWWWA 2012-06-20
  • 打赏
  • 举报
回复
插入记录的SQl?
cgcavalier518 2012-06-20
  • 打赏
  • 举报
回复
类似这样的

CREATE TABLE TBL_PM_LUN (
ID BIGINT NOT NULL AUTO_INCREMENT,
RESOURCE_ID VARCHAR (50) NOT NULL,
UTILIZATION INTEGER DEFAULT 0,
IS_AGGREGATED TINYINT (1) DEFAULT NULL,
INDECATED_TIME BIGINT NOT NULL,
AGGREGATED_TIME BIGINT DEFAULT NULL,
PRIMARY KEY (ID),
UNIQUE KEY `PK` (`ID`) USING BTREE,
KEY `IDX_RESOURCE_ID` (`RESOURCE_ID`) USING BTREE,
KEY `IDX_INDECATED_TIME` (`INDECATED_TIME`) USING BTREE,
KEY `IDX_AGGREGATED_TIME` (`AGGREGATED_TIME`) USING BTREE
);
WWWWA 2012-06-20
  • 打赏
  • 举报
回复
贴建表及插入记录的SQL,及要求结果出来看看

SELECT * FROM TBL_FOO A where A._TIME >1340031599000 and 5>(select count(*)

from TBL_FOO where a.id=id and a._TIME>_TIME)

56,893

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧