Вам понадобится таблица дат для группировки.Это довольно просто в MSSQL с использованием CTE, например this - я не уверен, что MySQL имеет что-то подобное?В противном случае вам нужно будет создать жесткую таблицу как одноразовое упражнение
РЕДАКТИРОВАТЬ: попробуйте:
SELECT COUNT(pp.subscribe_date) AS counter, dl.date, MIN(pp.recur)
FROM date_lookup dl
LEFT OUTER JOIN paypal pp
on (pp.subscribe_date = dl.date AND pp.recur ='monthly')
WHERE dl.date >= '2010-07-16' and dl.date <= '2010-07-23'
GROUP BY dl.date
ORDER BY dl.date
- Тема запроса должна быть изменена натаблица date_lookup (порядок левого внешнего соединения становится важным)
- Счетчик (*) не будет работать, поскольку запись «дата» всегда существует - нужно что-то подсчитать в таблице PayPay
- pp.recur = 'month' теперь является условием соединения, а не фильтром из-за LOJ
Наконец, показ pp.recur в списке выбора не будет работать.
Я использовал агрегат, но MIN (pp.recur) вернет ноль, если нет записей PayPal
Что вы можете сделать, когда вы параметризируете свой запрос, это просто повторить RecurТип фильтра?Опять же, извините за синтаксис MSSQL
SELECT COUNT(pp.subscribe_date) AS counter, dl.date, @ppRecur
FROM date_lookup dl
LEFT OUTER JOIN paypal pp
on (pp.subscribe_date = dl.date AND pp.recur =@ppRecur)
WHERE dl.date >= @DateFrom and dl.date <= @DateTo
GROUP BY dl.date
ORDER BY dl.date