我更愿意为此使用 JOIN,但是由于性能影响,没有一个解决方案是可行的,或者它们没有返回正确的结果集。
该RunTime
列是每晚午夜捕获的 UNIX 时间戳。并非每个条目都会在每晚出现,这意味着Entry1的条目可能在两天前出现,但不是今天。
架构:
`ID` int(11) unsigned NOT NULL AUTO_INCREMENT,
`Name` varchar(32) NOT NULL,
`Category` int(11) NOT NULL,
`RunTime` int(11) NOT NULL,
UNIQUE KEY `ID` (`ID`),
期望结果示例:
+-------------+----------------+----------+
| Name | LastRunTime | Count |
+-------------+----------------+----------+
| Random Name | 1339131600 | 73 |
| RandomName2 | 1337131600 | 13 |
... etc
本质上,我的工作查询如下所示。它将查询表以获取昨天的数据。
select Name,
RunTime AS LastRunTime,
count(*) AS Count
from TABLE
where RunTime =
(
select DISTINCT( RunTime ) from TABLE WHERE r.Name=Name order by RunTime LIMIT 1,1
)
and Category in
(
select AnotherTable .ID from AnotherTable where AnotherTable.Status = 1
)
group by Name
问题是,这个查询很慢。我想离开RunTime
列上的第一个子查询,但是 LIMIT 和关联对我来说是最好的。以上需要非常非常长的时间。
有没有人有一个方法的例子:
快速有效地获取第二个最近RunTime
的行数,在所有行之间不一致?RunTime
RunTime
任何建议表示赞赏!