0

次のテーブルがあり、正しいクエリを取得するのに苦労しています:

活動表:

ID   USER_ID    CARD_ID    CLOCK
1      123        04675545   4/3/2013 1:07:06 PM
2      123        04675545   4/3/2013 2:08:06 PM
3      124        04675550   4/3/2013 2:07:06 PM
4      124        04675550   4/3/2013 4:07:06 PM

** 価格表:

ID    FROMTIME    TOTIME       PRICEPERHOUR
1     08:00:00    19:59:59     50.00
2     20:00:00    07:59:59     75.00

1 時間あたりの料金と 1 日の合計アクティビティに基づいて、各ユーザーが 1 日に費やした金額を知る手順を作成しようとしています。適切なクエリを取得したら、それをトランザクション テーブルに挿入します。

これのベストプラクティスは何ですか?助けてくれる人に感謝します。

4

1 に答える 1

3

このクエリを試してください

ストアド プロシージャを作成する場合は、指定されたクエリから作成できます...

編集済み

select a.user_id, date(a.clock),  ABS(TIME_TO_SEC(TIMEDIFF(a.clock, b.clock))/3600)*c.PRICEPERHOUR as total from 
(Select if((@rn:=@rn+1)%2=0,@rn,@rn-1) As rId, act.* from act
join
(select @rn:=-1)a
order by user_Id, clock) a 
inner join 
(Select if((@rn1:=@rn1+1)%2=0,@rn1,@rn1-1) As rId, act.* from act
join
(select @rn1:=-1)b
order by user_Id, clock) b
ON a.rid=b.rid AND a.id <> b.id 
inner join 
price c
on 
TIME_TO_SEC(a.clock) between TIME_TO_SEC(c.FROMTIME) 
AND 
TIME_TO_SEC(c.TOTIME)
group by a.user_id, date(a.clock)

結果

| USER_ID |                DATE(A.CLOCK) |   TOTAL |
----------------------------------------------------
|     123 | April, 03 2013 00:00:00+0000 | 50.8333 |
|     124 | April, 03 2013 00:00:00+0000 |     100 |

SQL フィドル

于 2013-04-04T11:55:10.470 に答える