2017-01-21 6 views
0

私は最後の送金を受ける必要があるtbl_remitを持っています。mysqlの両方の日付である2列に基づいて金額を合計する方法

私は、雇用者の最終送金×12を使って各雇用者の潜在的な回収を得る必要があるシステムとして開発しています。理想的には、雇用者は毎月1回送金する必要があります。しかし、雇用者が新たに雇用された従業員のために同じ月に再び雇用される場合があります。私が使用したMysql Statementはこれでした。

SELECT Employer, MAX(AP_From) as AP_From, 
       MAX(AP_To) as AP_To, 
       MAX(Amount) as Last_Remittance, 
       (MAX(Amount) *12) AS LastRemit_x12 
FROM view_remit 
GROUP BY PEN 

その文をやって、結果

|RemitNo.| Employer | ap_from | ap_to | amount | 
| 1 |  1  |2016-01-01 |2016-01-31 | 2000 | 
| 2 |  1  |2016-02-01 |2016-02-28 | 2000 | 
| 3 |  1  |2016-03-01 |2016-03-31 | 2000 | 
| 4 |  1  |2016-03-01 |2016-03-31 | 400 | 

、私は間違った可能性のあるコレクションを取得することになりました。

What I've got: 
400 - Last_Remittance 
4800 - LastRemit_x12 (potential collection) 

What I need to get: 
2400 - Last_Remittance 
28800 - LastRemit_x12 (potential collection) 

ご協力いただきまして誠にありがとうございます。私はこのプロジェクトにチームを持っていません。これは初心者の質問かもしれませんが、私にとっては本当に複雑な問題です。前もって感謝します。

答えて

1

前回の期間のデータをフィルタリングする必要があります。だから、は、group byではなく、whereと考えてください。次に、あなたは雇用者によって集計したいと思う。

SELECT Employer, MAX(AP_From) as AP_From, MAX(AP_To) as AP_To, 
     SUM(Amount) as Last_Remittance, 
     (SUM(Amount) * 12) AS LastRemit_x12 
FROM view_remit vr 
WHERE vr.ap_from = (SELECT MAX(vr2.ap_from) 
        FROM view_remit vr2 
        WHERE vr2.Employer = vr.Employer 
        ) 
GROUP BY Employer; 

EDIT:ここ

が一つの方法である

パフォーマンスを得るために、あなたはview_remit(Employer, ap_from)にインデックスをしたいです。もちろん、それはview_remitが本当にテーブルであることを前提としています。 。 。それは起こりそうもないかもしれません。

パフォーマンスを向上させたい場合は、そのビューを理解する必要があります。

+0

私はあなたのコードを使用したとき、永遠にローディングされています:(私は200,000回の送金トランザクション/行を表示していると思いますか? xampp v3.2.1 – Clorae

+0

残念ながら、view_remitはテーブルではありません。エクスポートしてテーブルにしてから、コードをもう一度やり直してみます:) – Clorae

+1

@Clorae ...。これを行うと、インデックスを追加するとパフォーマンスが向上します。 –

関連する問題