2017-02-21 16 views
1

私たちは、2つのフィールドtkTimeOpenとtkTimeClosedを持つテーブルを持っています。今月と先月の平均待機時間を調べる必要があります。私は必要なものを引き出すために適切なSQLクエリを得ることができませんでした。今月と先月の2つのdatetimes間の平均時間

これは、日時が記録される方法です。 2017-01-25 10:35

今月の平均;

SELECT SUM(DATEDIFF(MINUTE,tkTimeOpen,tkTimeClose)) * 1.0 
     /(SELECT COUNT(*) * 1.0 FROM e_ticket) 
FROM e_ticket 
WHERE YEAR(tkTimeOpen) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH) AND MONTH(tkTimeOpen) = MONTH(CURRENT_DATE - INTERVAL 0 MONTH) 

先月の平均

SELECT SUM(DATEDIFF(MINUTE,tkTimeOpen,tkTimeClose)) * 1.0 
     /(SELECT COUNT(*) * 1.0 FROM e_ticket) 
FROM e_ticket 
WHERE YEAR(tkTimeOpen) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH) AND MONTH(tkTimeOpen) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH) 

私は、バリエーションの多くを試してみたが、それは所望の出力を与えるものではありません。 誰かがそれが偉大になるのを助けることができたら!

は、あなたが使用することができ

答えて

1

AVG()を使用することができます先月と今月の合計:

SELECT AVG(TIMESTAMPDIFF(MINUTE, tkTimeOpen, tkTimeClose)) 
FROM e_ticket 
WHERE tkTimeOpen >= DATE_ADD(LAST_DAY(DATE_SUB(NOW(), INTERVAL 2 MONTH)), INTERVAL 1 DAY); 

それでも別に平均値を取得する必要がある場合は、あなたが今月のあなたが持っているものに似た、あなたのWHERE句...

を保つことができます。

SELECT AVG(TIMESTAMPDIFF(MINUTE, tkTimeOpen, tkTimeClose)) 
FROM e_ticket 
WHERE YEAR(tkTimeOpen) = YEAR(NOW()) AND MONTH(tkTimeOpen) = MONTH(NOW()); 

そして先月のために:

SELECT AVG(TIMESTAMPDIFF(MINUTE, tkTimeOpen, tkTimeClose)) 
FROM e_ticket 
WHERE YEAR(tkTimeOpen) = YEAR(NOW() - INTERVAL 1 MONTH) AND MONTH(tkTimeOpen) = MONTH(NOW() - INTERVAL 1 MONTH); 
0
  1. 一つの機能はTIMESTAMPDIFFですありがとう - ないDATEDIFF
  2. あなたはこれがあなたの平均的な分を与える必要があります代わりにSUM()/COUNT()
SELECT AVG(TIMESTAMPDIFF(MINUTE,tkTimeOpen,tkTimeClose)) 
FROM e_ticket 
WHERE YEAR(tkTimeOpen) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH) 
    AND MONTH(tkTimeOpen) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH)