我想知道是否有可能運行,告訴我一個查詢以下內容:
Mysql的比較當前結果平均結果在一個查詢
得到有任何應用程序的名稱(目前執行)工作超過歷史平均運行時間
表1:作業歷史
- 工作開始時間
- 工作結束時間
- 工作狀態(成功,失敗,執行等)觸發的工作
表2
- ID
- 名稱
這似乎是一個簡單的問題來回答,但創建一個MySQL查詢已被證明是一個相當複雜的(儘管是耐人尋味的)挑戰...
查詢需要抓住就業機會,其中satus = executing
,使用application.id
尋找那些有其他工作相匹配的application.id
和status = success
,平均的(end_time
- start_time
),然後比較average time
與(current_time
- start_time
)當前正在執行的任務的。最後,它必須使用來自任何未通過此測試的作業的應用程序ID,以從應用程序表中獲取application.name
。這甚至可以在單個查詢中完成嗎?
爲了這個問題,我們假設current_time
作爲參數傳入。
我做了一個三重嵌套查詢的嘗試,但我得到以下錯誤,我不知道爲什麼。我花了幾個小時,試圖得到這個工作,但我在已經在我這裏頭:
ERROR 1054 (42S22): Unknown column 'jh.start_time' in 'having clause'
這是我的嘗試:
SELECT name FROM application
WHERE application.id IN (
SELECT application_id
FROM job_history AS jh
WHERE application_id IN (
SELECT application_id
FROM job_history
WHERE status='EXECUTION')
AND jh.status='SUCCESS'
HAVING (avg(jh.end_time - jh.start_time)) < (current_time - jh.start_time)
);
編輯:建議,這裏是一些示例數據。
表1
+--------+------------+------------+----------+----------------+
| job_id | status | start_time | end_time | application_id |
+--------+------------+------------+----------+----------------+
| job1 | successful | 100 | 200 | app1 |
| job2 | failed | 150 | 350 | app2 |
| job3 | successful | 200 | 400 | app1 |
| job4 | execution | 500 | 0 | app1 |
| job5 | successful | 600 | 800 | app3 |
+--------+------------+------------+----------+----------------+
表2
+------+------------------+
| id | name |
+------+------------------+
| app1 | Team Green's app |
| app2 | Team Blue's app |
| app3 | Team Red's app |
+------+------------------+
我想抓住作業4,使用application_id
找到JOB1和作業3。然後取平均運行時間job1和job3,並將其與當前運行時間job4進行比較。如果當前運行時間大於平均運行時間,那麼我想報告應用程序名稱:Team Green的應用程序。
你可能有更多的成功,如果你提供的樣本數據和預期的結果。 – sgeddes