2016-12-17 3 views
2

私が欲しいものを記述するのは難しいが、私は試してみる: まず、私は2つのテーブルを持っている:従業員と給料。私は、このSQLコマンドによって2つのテーブルに参加しました:どのように結果をフィルタリングする

"SELECT employee.id, employee.employee_name, employee.image, salary.year, salary.month, salary.day, salary.total_salary, salary.id, salary.created 
         FROM employee 
       JOIN salary ON salary.employee_id=employee.id" 

私が挿入されたすべての値を取得するには、後に実行し、私が得た:その後

Created    name year  month day(working)  total_salary 
------------------------------------------------------------------------------ 
2016-12-17 20:41  A  2016  1   31    1550000 
2016-12-17 21:49  A  2016  1   20    2000000 
2016-12-17 22:49  A  2016  2   20    2000000 
2016-12-18 22:43  B  2016  2   15    1550000 
2016-12-18 23:43  B  2016  2   10    1000000 
2016-12-18 23:49  B  2016  2   1    100000 

を、私は、月ごとの最新の値を取得したいです私は、上記のSQLの最後に、このコマンドを追加します。

GROUP BY employee.employee_name, salary.year, salary.month" 

と、この得た:

Created    name year  month day(working)  total_salary 
------------------------------------------------------------------------------ 
2016-12-17 20:41  A  2016  1   31    1550000 
2016-12-17 22:49  A  2016  2   20    2000000 
2016-12-18 22:43  B  2016  2   15    1550000 

どのようなクエリで次の結果が返されますか?あなたのグループの前に

Created    name year  month day(working)  total_salary 
------------------------------------------------------------------------------ 
2016-12-17 21:49  A  2016  1   20    2000000 
2016-12-17 22:49  A  2016  2   20    2000000 
2016-12-18 23:49  B  2016  2   1    100000 
+0

私はちょっと混乱しています。あなたはそれらを 'month'でグループ化したいと思っていますが、あなたの望む出力には矛盾しているような同じ' month'の2つがあります。 – Mihailo

+1

あなたは従業員のそれぞれが多くの月を持っているのを見ることができます、私はちょうど従業員の毎月を表示したいです。少し複雑に思えます:)) – trungducng

+0

実際のテーブルを置くと、クエリをテストするほうが助かります。それがなければ、各従業員の合計を計算するサブクエリを作成し、それをメインテーブルに結合すると言うことができます。 –

答えて

1

あなたは、最新のエントリが最初にある作成した日付でエントリをソートする必要があります

ORDER BY salary.created DESC 

変更最初のクエリ(あなたがするので、IDのいずれかを削除するか、エイリアスする必要が同じ名前の2つの列があります)。

SELECT employee.id as employee_id, employee.employee_name, employee.image, salary.year, salary.month, salary.day, salary.total_salary, salary.id, salary.created 
FROM employee JOIN salary ON salary.employee_id=employee.id 
ORDER BY salary.created DESC 

最後に作成された列が最初に表示されます。

SELECT * FROM (
    SELECT employee.id as employee_id, employee.employee_name, employee.image, salary.year, salary.month, salary.day, salary.total_salary, salary.id, salary.created 
    FROM employee 
    JOIN salary ON salary.employee_id=employee.id 
    ORDER BY salary.created DESC 
) as employee_salary 
GROUP BY employee_salary.employee_name, employee_salary.year, employee_salary.month 
+1

URの助けをありがとうが、それでも私のために働いていない:(結果はまだ私が上記と同じ結果を返す – trungducng

+0

私はそれらの2つのテーブルのダンプを送ることができますか? 2つのテーブルを作成し、私のクエリで私はあなたが望んだと思う結果を得た... – Echron

1

私の出発点は結合後です。最初の結果としてデータを持つテーブルを作成しました。

このクエリでは

:あなたはGROUPとのグループにそれらを詰める前に、基本的にはトリックが発注を処理することでした

Created    name year  month day(working)  total_salary 
------------------------------------------------------------------------------ 
2016-12-17 21:49  A  2016  1   20    2000000 
2016-12-17 22:49  A  2016  2   20    2000000 
2016-12-18 23:49  B  2016  2   1    100000 

:私はあなたが尋ねた結果を持っている

SELECT created, name, year, month, day, total_salary FROM 
(SELECT * FROM employees 
    ORDER BY created DESC 
) AS sub 
GROUP BY name, month, year; 

BY
私は順序を処理するsubQueryを作成しました。このは、これを行う方法を理解する手助けをしました。

は、ここであなたが遊んで、あなたの出発クエリにそれを調整することができFiddleです。

関連する問題