これにはJOINを使用したいと思いますが、パフォーマンスへの影響のために実行可能なソリューションはなく、正しい結果セットが返されません。
列は、RunTime
毎晩真夜中にキャプチャされた UNIX タイムスタンプです。すべてのエントリーが毎晩発生するわけではありません。
スキーマ:
`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 と関連付けがうまくいきません。上記は非常に、非常に、長い時間がかかります。
誰かが次の方法の例を持っていますか?
2 番目に最近の、2 番目に最近RunTime
の の行数をRunTime
迅速かつ効率的に取得し、RunTime
すべての行で一貫していない場所はどこですか?
どんな提案でも大歓迎です!