【发布时间】:2010-10-21 07:55:32
【问题描述】:
做一张这样的桌子:
CREATE TABLE `amoreAgentTST01` (
`moname` char(64) NOT NULL DEFAULT '',
`updatetime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`data` longblob,
PRIMARY KEY (`moname`,`updatetime`)
我有一个查询来查找每个不同的“moname”的最旧记录,但前提是这个“moname”有多个记录:
SELECT moname, updatetime FROM amoreAgentTST01 a
WHERE (SELECT count(*) FROM amoreAgentTST01 x WHERE x.moname = a.moname) > 1
AND a.updatetime = (SELECT min(updatetime) FROM amoreAgentTST01 y WHERE y.moname = a.moname) ;
我的问题是:如何做同样的事情,但选择 X 最旧的值? 我现在只是简单地运行它,删除最旧的值并重新运行它......这不太好。
第二个问题是:你觉得上面的查询怎么样?可以改进吗?有什么明显的坏习惯吗?
提前感谢您的建议和帮助。
巴特
【问题讨论】:
-
您的意思是选择所有不是该 moname 的最新行的行吗?或者只是每个 moname 固定 X 行?
-
每个 moname 固定 X 行,这些行是最旧的。
标签: mysql optimization select conditional-statements