0

我更愿意为此使用 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的行数,在所有行之间不一致?RunTimeRunTime

任何建议表示赞赏!

4

2 回答 2

1
    Select Name, Max(RunTime ) as  LastRunTime        ,Count(*) as Count
    from TABLE a
    Inner join AnotherTable b ON a.Category =b.ID and   b.Status = 1
    GROUP BY name
    Having LastRunTime < Max(RunTime )
于 2012-08-06T19:26:33.020 回答
0

我坚持使用子查询,但将时间范围更改为WHERE RunTime = (SELECT MAX(RunTime) - 86400....

所有其他过于苛刻或复杂的解决方案或尝试。

于 2012-08-08T17:49:55.270 回答