#mysql #date
#mysql #Дата
Вопрос:
Во-первых, я видел ответы в SO, которые связаны с моим вопросом, и получил от них идею дизайна tblmonths. Но я стек с этим:
В принципе, я хочу указать даты начала и окончания как: 2015-05-01 и 2016-01-01. Я хочу получать записи между этими датами в зависимости от месяца. Если в течение месяца между ними не существует данных, оно должно возвращать 0.
Пока мой запрос возвращает правильные данные, но всегда в течение 12 месяцев, даже если даты разделены несколькими месяцами. За период 2015-10-01 И 2016-01-01 выходные данные должны быть:
2015-Oct = 10
2015-Nov = 0
2015-Dec = 5
2016-Jan = 2
SELECT
tblmonths.monthid,
COUNT(servicestatusid) as totalcompleted
FROM tblmonths
left JOIN tblservicestatus ON (tblmonths.monthid=MONTH(tblservicestatus.statusupdatedon)
AND tblservicestatus.statusupdatedon BETWEEN 2015-10-01 AND 2016-01-01)
GROUP BY monthid
Я переместил:
tblservicestatus.statusupdatedon BETWEEN 2015-10-01 AND 2016-01-01
из ЛЕВОГО СОЕДИНЕНИЯ, но без изменений, и включил его как ИМЕЮЩИЙ после предложения GROUP BY.
Кто-то предложил мне сделать это через поле monthid, и я придумал:
SELECT
COUNT(servicestatusid) as totalcompleted
FROM tblmonths
LEFT JOIN tblservicestatus ON (tblmonths.monthid=MONTH(tblservicestatus.statusupdatedon)
AND CONCAT_WS("-",2015,monthid,1) BETWEEN 2015-10-01 AND 2016-01-01)
GROUP BY monthid
Интересно, возвращает ли CONCAT_WS строку, попробовал STR_TO_DATE . Единственное изменение, которое вносит некоторые изменения, — это изменение соединения, но результат неверен.
Где я ошибаюсь?
Комментарии:
1. Обычно вы обрабатываете логику пропущенных дат на уровне представления, предполагая, что это доступно
2. @Strawberry это вариант, но он будет излишним, но позвольте мне попробовать. Спасибо.