Я пытаюсь получить некоторую помощь в решении моего сложного запроса. Я объясняю ниже свою ситуацию, спасибо.Ежедневный отчет MySql
У меня есть следующие две таблицы:
ACTIVITY TABLE:
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
5 124 04675550 4/4/2013 10:07:06 AM
6 124 04675550 4/4/2013 2:00:00 PM
7 124 04675550 4/5/2013 4:07:06 PM
8 124 04675550 4/7/2013 8:00:00 AM
9 124 04675550 4/7/2013 5:00:00 PM
PRICE TABLE:
ID FROMTIME TOTIME PRICEPERHOUR
1 08:00:00 19:59:59 50.00
2 20:00:00 07:59:59 75.00
И следующий запрос:
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:[email protected]+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:[email protected]+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
124 April, 04 2013 00:00:00+0000 194.0833
124 April, 05 2013 00:00:00+0000 1,994.0833
124 April, 07 2013 00:00:00+0000 1,994.0833
Однако я пытаюсь для получения этого результата:
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
124 April, 04 2013 00:00:00+0000 194.0833
124 April, 05 2013 00:00:00+0000 50
124 April, 07 2013 00:00:00+0000 450
Это часть системы часов. Каждый раз, когда пользователь регистрируется, одна запись записывается в базу данных. Правильное поведение пользователя будет заключаться в том, что он всегда записывает пару записей. Например, user_id 123 часы в 13:07:06 и часы снова в 2:08:06 pm. Тем не менее, в некоторых ситуациях пользователь может сделать это только один раз (неспаренная запись в базе данных), и поэтому он должен оплачиваться только в тот час из записи. Например, пользователь 124 в день 5/5/2013.
Я пытаюсь все выходные, чтобы получить этот запрос работает :(. После того, как я получить правильный результат, я добавить условие, чтобы получить только один user_id также, (например, когда user_id = 124).
@Meherzad, любая идея о наилучшем подходе к вышеуказанному? Большое спасибо – carol1287