Помогите с выборкой данных

dmitry_the
Дата: 16.01.2013 20:43:29
Есть вот такой запрос:

select  csv_data.agent_id, sum(rewards.score) as dm_rewards from csv_data  
left join rewards on rewards.agent_id=csv_data.agent_id and date(rewards.date)=date(csv_data.dialed_date)  
join tbl_members_plans on csv_data.plan_id=tbl_members_plans.id  
 
where tbl_members_plans.member_id=4 
and dialed_date>='2013-01-15 01:00:00'  
and dialed_date<='2013-01-15 23:00:00'  
 
group by csv_data.agent_id


исходя из особенностей проекта, могу менять только JOIN-ы, например "left join rewards...", могу добавлять поля в SELECT. Могу добавить таблицу во FROM

Теперь то, что нужно сделать, но не получается:

Есть две 4 таблицы:
csv_data, rewards и tbl_members_plans

в csv_data данные могут содержать один и тот же agent_id за день, выборка ведется за определенные период (что видно из where),
в rewards данные такого типа:

agent_id | date | score
----------------------
1 | 2013-01-15 | 10
2 | 2013-01-15 | 20
3 | 2013-01-15 | -50
1 | 2013-01-16 | 20
2 | 2013-01-16 | 20
3 | 2013-01-16 | 30
...

когда я выполняю данный запрос, я получаю неправильную сумму по score из-за того, что в csv_data может быть несколько разных agent_id, т.е. если убрать все агрегаторы (sum() и group by) то я получаю данные типа

agent_id | dm_rewards
----------------------
1 | 10
1 | 10
1 | 10
2 | 20
2 | 20
3 | -50
...

если группировать и суммировать (как в изначальном запросе), то сумма совсем неправильная :(

Как можно изменить запрос в таких строгих рамках, как у меня (могу менять только join-ы, добавлять from-ы и полять в select)
И можно ли вообще.

Спасибо, что осилили :) Если ответите, то вообще цены вам не будет :)
Akina
Дата: 16.01.2013 21:02:58
Лучше укажи, что НЕ можешь менять... а то в select можно добавить не только поля, но и весь запрос, закончив его двумя минусами...
dmitry_the
Дата: 16.01.2013 21:37:33
Не могу менять where clause и group. Не могу добавить дополнительные выражения типа HAVING, ORDER...
Akina
Дата: 16.01.2013 21:58:54
select 
fieldset from tableset where conditionset group by groupset; --
 csv_data.agent_id, sum(rewards.score) as dm_rewards from csv_data  
left join rewards on rewards.agent_id=csv_data.agent_id and date(rewards.date)=date(csv_data.dialed_date)  
join tbl_members_plans on csv_data.plan_id=tbl_members_plans.id  
 
where tbl_members_plans.member_id=4 
and dialed_date>='2013-01-15 01:00:00'  
and dialed_date<='2013-01-15 23:00:00'  
 
group by csv_data.agent_id
dmitry_the
Дата: 16.01.2013 22:02:45
мерси:)