Я считаю, что следующее будет делать то, что вы хотите (даты для моего удобства разные, я не собирался добавлять все даты, показанные в вопросе): -
SELECT substr(date,1,7)||':' AS Date, count() AS number_of_robberies
FROM robbery
WHERE datetime(date) BETWEEN datetime('2016-01-01') AND datetime('2017-02-28')
GROUP BY substr(datetime(date),1,7)
;
, используя следующее (загрузить некоторые данные): -
DROP TABLE IF EXISTS robbery;
CREATE TABLE IF NOT EXISTS robbery (id INTEGER PRIMARY KEY, city TEXT, date TEXT);
INSERT INTO robbery (city,date) VALUES
('Chicago','2018-01-01'),('New York','2017-03-21'),
('Chicago','2018-02-01'),('New York','2018-01-21'),
('Chicago','2018-02-01'),('New York','2018-03-21'),
('Chicago','2018-02-01'),('New York','2017-01-21'),
('Chicago','2018-03-01'),('New York','2018-03-21'),
('Chicago','2018-03-01'),('New York','2018-01-21'),
('Chicago','2018-03-01'),('New York','2017-01-21'),
('Chicago','2016-01-01'),('New York','2017-03-21'),
('Chicago','2018-02-01'),('New York','2018-01-21'),
('Chicago','2017-02-01'),('New York','2018-03-21'),
('Chicago','2018-02-01'),('New York','2016-01-21'),
('Chicago','2016-03-01'),('New York','2016-03-21'),
('Chicago','2016-03-01'),('New York','2018-01-21'),
('Chicago','2018-03-01'),('New York','2018-01-21');
SELECT substr(date,1,7)||':' AS Date, count() AS number_of_robberies
FROM robbery
WHERE datetime(date) BETWEEN datetime('2016-01-01') AND datetime('2017-02-28')
GROUP BY substr(datetime(date),1,7)
;
Результат: -
- Примечание месяцев, где нетограбления не отображаются (как видно).