1

シナリオ: 各クライアントに適用される金額の合計を、時間料金と、さまざまな料金カテゴリでサービスを提供/受信した時間 (分) に基づいて計算する必要があります。

次のクエリを使用すると、次の結果が得られます。

SELECT pc.client_id, pr.hourly_rate, (SUM(tt.time_end) - SUM(tt.time_start)) as Difference
FROM  track_time as tt, project_track as pt, project as pr, project_clients as pc, clients as cl
WHERE tt.track_id = pt.track_id
AND pt.project_id = pr.project_id
AND pr.project_id = pc.project_id
AND pc.client_id = cl.client_id 
GROUP BY hourly_rate

結果

client_id   hourly_rate   Difference
1           50            6360
1           23            4080
1           43            5760
6           13            34680
7           60            32400
7           14            23340

関数を使用して DIFFERENCE 結果を読み取り可能な時間に変換する必要がある最初の方法を理解しようとしています。次に、その変換された結果の時間をそれぞれの hourly_rate に乗算し、各クライアントの SUM を取得します。

これ (以下) を最初に試してみましたが、これは非常に近いものですが、正確ではありません。最初に DIFFERENCE 列を最初に変換する必要があるため、正確ではないと考えています。

SELECT SUM(Difference2) AS total
FROM (SELECT pc.client_id, pr.hourly_rate, (SUM(tt.time_end) - SUM(tt.time_start)) as Difference, ((SUM(tt.time_end) - SUM(tt.time_start)) * pr.hourly_rate) as Difference2
FROM  track_time as tt, project_track as pt, project as pr, project_clients as pc, clients as cl
WHERE tt.track_id = pt.track_id
AND pt.project_id = pr.project_id
AND pr.project_id = pc.project_id
AND pc.client_id = cl.client_id   
GROUP BY hourly_rate) AS table1

何か案は?

4

1 に答える 1

1

これはうまくいきました:

SELECT SUM(T) as YES FROM (
SELECT pc.client_id, pr.hourly_rate, ROUND((( SUM(tt.time_end) - SUM(tt.time_start))/3600),2) as Difference, (ROUND((( SUM(tt.time_end) - SUM(tt.time_start))/3600),2) * hourly_rate) as T
FROM track_time as tt, project_track as pt, project as pr, project_clients as pc, clients as cl
WHERE tt.track_id = pt.track_id
AND pt.project_id = pr.project_id
AND pr.project_id = pc.project_id
AND pc.client_id = cl.client_id
AND cl.client_id = " . $db->prep($client_id) . " GROUP BY hourly_rate) as table1
于 2012-07-01T21:53:33.140 に答える