2016-06-02 14 views
2

過去6週間に評価を行ったEmployeesデータをすべて選択してクエリを編集しました。論理的には、2週間で評価を行った場合、各従業員は2回は必要ですが、このクエリでは1つのレコードが表示されます。Mysql JOINを使用して過去6週間のデータを取得

select 
    AssessmentEmployee. 
    EmployeeName, 
    AVG(AssessmentListing.AssessmentScore), 
    DATE_FORMAT((STR_TO_DATE(`AssessmentSubmittedDatetime`, '%d-%b-%Y %I:%i %p')) , '%Y-%m-%v') as _month 
from AssessmentEmployee 
LEFT JOIN AssessmentListing 
ON AssessmentEmployee.AssessmentID=AssessmentListing.AssessmentID 
WHERE (STR_TO_DATE(`AssessmentSubmittedDatetime`, '%d-%b-%Y %I:%i %p') >= DATE_FORMAT(NOW() - INTERVAL 6 Week, '%Y')) 
group by AssessmentEmployee.EmployeeName 

私は次の表を使用しています。

AssessmentEmployee 
ID 
AssessmentID 
EmployeeName 

他のテーブルには、私はスコア/ラストセックス週間で行わ評価及びそれらの平均スコアを持つ従業員を取得したい

ID 
AssessmentID 
AssessmentSubmittedDateTime 
AssessmentScore 

をAssessmentListingています。彼らは二回それを取るならば、それは2点の得点を平均化しますので、AssessmentListing

ID AssessmentID  AssessmentSubmittedDatetime  AssessmentScore 
1  040416024720  04-Apr-2016 02:48 PM    50 
+0

「週番号」と「従業員名」でグループ化する必要があります。 – 1000111

+0

'AssessmentEmployee.EmployeeName'で' group by 'と言うとき、 'EmployeeName'の各値のデータをすべて単一の行にまとめるように要求しています。もちろん、あなたは1つの行だけを取得します(あなたが期待していた2つの行ではありません)。 – Turophile

+0

@Turophileそれは、アダムとジャックが過去2週間でやったと言うことができるようにしたいので、それは両方のために表示する必要がありますまた過去6週間のいずれかの週は過去の週を取るよりもレコードを持っていない場合、それは別の週を取るべきではない –

答えて

0

次のクエリを試してみてください:

select 
    AssessmentEmployee. 
    EmployeeName, 
    AVG(AssessmentListing.AssessmentScore), 
    DATE_FORMAT((STR_TO_DATE(`AssessmentSubmittedDatetime`, '%d-%b-%Y %I:%i %p')) , '%Y-%v') as year_week 
from AssessmentEmployee 
LEFT JOIN AssessmentListing 
ON AssessmentEmployee.AssessmentID=AssessmentListing.AssessmentID 
WHERE UNIX_TIMESTAMP(DATE_FORMAT(STR_TO_DATE(`AssessmentSubmittedDatetime`,'%d-%b-%Y %I:%i %p'),'%Y-%m-%d')) >= UNIX_TIMESTAMP(CURDATE() - INTERVAL 6 WEEK) 
group by AssessmentEmployee.EmployeeName, year_week; 

あなたは文字列として保存日付/時刻べきではありません。それ以外の場合は、処理中にこれらの面倒な作業を受け入れます。

+0

あなたは正しいですが、このようなレポートになるとは思っていませんでした。 –

+0

今、私はその仕事をしましたか?あなたは期待される成果を得ていますか? @DilshadAli – 1000111

+0

私は外に出ていますが、私に確認させてください –

0

のデータ列の

サンプルあなたは平均をやっています。

0
SELECT *, SUM(AssessmentScore) as total, SUM(AssessmentScore)/6 as avg 
FROM `assessmentlisting` 
WHERE STR_TO_DATE(`AssessmentSubmittedDatetime`, '%d-%b-%Y %I:%i %p') > DATE_FORMAT(NOW() - INTERVAL 6 Week, '%Y-%m-%d %I:%i %p') 
GROUP BY assessmentlisting.AssessmentID 

希望します。

関連する問題