0

これには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すべての行で一貫していない場所はどこですか?

どんな提案でも大歓迎です!

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 に答える