2015-10-06 3 views
0

I имеет следующую структуру:Выборки из базы данных подсчета по дням

id | some_foreign_id | date 
1 5     2015-09-29 23:14:23 
2 5     2015-09-29 14:13:21 
3 8     2015-09-28 22:23:12 

Для указанного some_foreign_id Я хочу вернуть количество строк в этой таблице для каждого дня из последних 2-х недель. Я создал это:

SELECT DATE(t.sent_at), COUNT(*) 
FROM table t 
INNER JOIN sometable st ON st.some_id = t.id 
INNER JOIN someOtherTable sot ON sot.someother_id = st.id 
WHERE t.sent_at >= DATE_ADD(CURDATE(), INTERVAL -14 DAY) 
AND t.some_foreign_id = 5 
GROUP BY DATE(t.sent_at); 

Это показывает некоторые результаты, но:

  1. Не показывать 0, если день имеет 0 записей.
  2. Изменение интервала до -15 изменяет счетчик с последнего дня - не знаю почему.

Как я мог сделать это правильно?

+0

Можете ли вы предоставить некоторые данные образца. – Rahul

+0

У вас есть, для id '5' он должен вернуть 2 строки для' 2015-09-29' и 0 строк за все остальные дни с предыдущих 2 недель. – khernik

ответ

0

Для решения 1. Вы должны будете налево присоединиться к чему-то, как this и использовать IFNULL()

Для решения 2. (или пытаются), попробуйте изменить запрос к этому (я предлагаю вам решить эту проблему первым):

SELECT DATE(t.sent_at), COUNT(*) 
FROM table t 
INNER JOIN sometable st ON st.some_id = t.id 
INNER JOIN someOtherTable sot ON sot.someother_id = st.id 
WHERE DATE(t.sent_at) >= DATE(DATE_ADD(CURDATE(), INTERVAL -14 DAY)) 
AND t.some_foreign_id = 5 
GROUP BY DATE(t.sent_at); 
Смежные вопросы