Среднемесячный запрос к базе данных ограблений с помощью sqlite - PullRequest
0 голосов
/ 30 сентября 2018

Я использую sqlite.У меня есть таблица базы данных (ограбление), в которой хранится информация о том, когда и где произошло ограбление.Таблица грабежа имеет следующие атрибуты: дата, город, id (PK).Дата - это день, когда произошло ограбление (каждая строка означает одно ограбление).

enter image description here

Даты хранятся в таблице ограбления в следующем формате:2017-07-01

Я пытаюсь получить эту информацию: Сумма грабежей, которые происходили каждый месяц в этот период: между 2016-07 и 2017-02.

Например, из прикрепленной базы данных, Я хотел бы получить этот результат с помощью запроса:

2016-08: 2
2016-09: 1
2017-02: 1

1 Ответ

0 голосов
/ 30 сентября 2018

Я считаю, что следующее будет делать то, что вы хотите (даты для моего удобства разные, я не собирался добавлять все даты, показанные в вопросе): -

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)
;

Результат: -

enter image description here

  • Примечание месяцев, где нетограбления не отображаются (как видно).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...