with
cte1 as(
select sts.user_id,u.username,sts.target,sts.from_date,sts.to_date
from sales_target_settings sts
left join users u on sts.user_id=u.id
order by sts.id
),
cte2 as (
select count(*) as tot,se.assign_to_id
from sales_enquiry se
left join cte1 on se.assign_to_id=cte1.user_id
where se.enq_date between cte1.from_date and cte1.to_date
group by se.assign_to_id)
select cte1.user_id,cte1.username,cte1.target,cte1.from_date,cte1.to_date,coalesce(cte2.tot,0) as total,case when (cte1.target-coalesce(cte2.tot,0))>0 then cte1.target-coalesce(cte2.tot,0) else 0 end as balance
from cte1 left join cte2 on cte1.user_id=cte2.assign_to_id
order by cte1.username ;
ВЫХОДВозврат Дубликат значение Postgresql запроса
Первая таблица sales_target_settings' columns
идентификатор_пользователя целевой
,
FROM_DATE ,
to_date`
второй таблицы sales_enquiry
столбцы enq_date
, assign_to_id
.
Я хочу, чтобы суммарный запрос рассчитывался для каждого пользователя, где дата запроса между from_date и to_date из таблицы sales_target_settings
.
От выхода для идентификатора пользователя 111
общее значение 6
. Фактически дата между 2016-10-01
и 2016-10-31
общая стоимость для пользователя 111
6
верна, но дата между 2016-09-01
и 2016-09-30
общая стоимость 0
. Как решить эту проблему. Я думаю, что запрос не проверяет дату между 2016-09-01
в 2016-09-30
для пользователя 111
Очень трудно помочь, если вы не описываете таблицы, связанные и не запрашивайте данные. См. [Советы по заданию хорошего вопроса о структурированном запросе языка (SQL)] (http://meta.stackoverflow.com/a/271056/4955425). – sstan
Пожалуйста, добавьте эту информацию как отредактировать свой вопрос, а не в комментарии. Это позволит вам форматировать информацию более читаемым образом. – sstan
Примечание: 'порядок по sts.id' в CTE или подзапросе не имеет смысла. – wildplasser