2013-02-01 51 views
1

我想查找8個月前開始工作的員工的平均工資。找到幾個月前的平均工資 - MySQL

我試圖使代碼但不知何故,它顯示空..

SELECT AVG(salary) FROM Staff 
WHERE salary = DATE_SUB(sWDate, INTERVAL 8 MONTH); 

一切都該表中。

任何人都可以幫助我嗎?我不確定我做錯了什麼。謝謝。

+1

上面的SQL是有效的,'集團By'沒有,如果你想平均工資的員工在這裏 –

+0

爲什麼你用日期進行比較的工資要求?你的加入日期是哪一列? –

+0

我的錯誤。我認爲薪水等於8個月前的日期。 – Dembele

回答

1

爲什麼salary = DATE_SUB(sWDate, INTERVAL 8 MONTH)

WITHIN 8月:

SELECT AVG(salary) FROM Staff 
WHERE sWDate <= NOW() AND sWDate >= DATE_SUB(Now(), INTERVAL 8 MONTH); 

另:

SELECT AVG(salary) FROM Staff 
WHERE sWDate <= NOW() AND sWDate >= DATE_ADD(Now(), INTERVAL -8 MONTH); 

PS:最好根據您在sWDate中的日期格式來格式Now()以獲得精確的結果。否則,您可以使用Year/Month

例如爲:

SELECT AVG(salary) FROM Staff 
WHERE Date_Format(sWDate,'%Y-%m') <= Date_Format(NOW(),'%Y-%m') 
AND Date_Format(sWDate,'%Y-%m') >= Date_Format(DATE_ADD(Now(), INTERVAL -8 MONTH), '%Y-%m'; 
+0

感謝它的工作原理(第一和第二個1,還沒有嘗試過3)。 1問題怎麼來'SELECT AVG(薪水)FROM職員WHERE sWDate = DATE_SUB(sWDate,INTERVAL 8 MONTH); '不工作? – Dembele

+0

我愚蠢的錯誤!我忘了在8之前放減號......再次感謝你! – Dembele

+0

請嘗試評論。讓我們知道,如果一切正常適合你。 :) – bonCodigo

0

,我認爲你應該檢查Date領域,而不是工資日期

SELECT AVG(salary) FROM Staff 
WHERE [DateField] = DATE_SUB(NOW(), INTERVAL 8 MONTH);