0

我有一個查詢,我已經用來確定什麼時候石英工作。我試圖設計一種方法來確定石英工作何時落後或陷入困境。問題在於作業時間間隔不同,因此我希望在確定作業何時中斷時能夠使用「大於X的標準偏差」邏輯。有沒有辦法在MySQL中做到這一點?這將主要是:解析時間差異併除以mysql

(previous_fire_time - next_fire_time)/一個時間間隔= X性偏差

select job_group, job_name, 
     from_unixtime(prev_fire_time/1000) prev, 
     from_unixtime(next_fire_time/1000) next, 
     sec_to_time((next_fire_time - prev_fire_time)/1000) diff 
    from qrtz_triggers; 
+-----------+------------------------+--------------------------+--------------------------+----------------+ 
| job_group | job_name    | prev      | next      | diff   | 
+-----------+------------------------+--------------------------+--------------------------+----------------+ 
| jon  | media     | 2016-02-25 15:50:30.0000 | 2016-02-25 16:50:30.0000 | 01:00:00.0000 | 
| jon  | ListUpdater   | 2016-02-25 15:36:00.0000 | 2016-02-25 16:06:00.0000 | 00:30:00.0000 | 
| jon  | Resolver    | 2016-02-25 05:00:00.0000 | 2016-02-26 05:00:00.0000 | 24:00:00.0000 | 
| dan  | Resubmitter   | 2016-02-25 15:55:30.0000 | 2016-02-25 16:55:30.0000 | 01:00:00.0000 | 
| admin  | NetworkExecutor  | 2016-02-25 06:10:00.0000 | 2016-02-26 06:10:00.0000 | 24:00:00.0000 | | admin  | AUpdater       | 2016-02-21 03:00:00.0000 | 2016-02-28 03:00:00.0000 | 168:00:00.0000 | 
| admin  | alexaweb    | 2016-02-25 15:55:36.0000 | 2016-02-25 15:56:36.0000 | 00:01:00.0000 | 

回答

0

MySQL提供的聚合函數STDDEV() and some variants,帶着一幫其他的統計功能一起。

如果你想了一堆的時間間隔的平均值(算術平均值),標準差從startend,你這樣做:

SELECT AVG(end-start) mean, STDDEV(end-start) stddev 
    FROM table 

如果你想找到在表中的行是具有持續時間高於均值超過兩個標準差,你這樣做......

SELECT table.* 
    FROM table 
    WHERE (end-start) > (SELECT (AVG(end-start) + (2.0 * STDDEV(end-start))) 
        FROM table) 

應該讓你開始那。

我做了一堆這種東西一次。我發現在我能夠可靠地計算構成異常觀測的標準偏差的數量之前,有必要獲得相當大的「正常」觀測數據集。我還發現,持續時間是一個很大的麻煩跡象:這些都是在完成之前被剔除的工作(這是一個技術術語)。

最後,我想你可能會稍微好一些,使用mean absolute deviation rather than standard deviation。它對極端異常值不太敏感。