Есть ли какая-либо функция в SQLITE, чтобы получить счет с DISTINCT и Дата? - PullRequest
0 голосов
/ 15 января 2019

Я пишу запрос на выборку, чтобы получить количество строк с DISTINCT, где месяц вставленной даты совпадает с текущим месяцем.

Мой запрос на выбор:

SELECT count(DISTINCT villageid) AS villages_visited 
FROM indexcard 
WHERE strftime('%Y',visiteddate) = strftime('%Y',date('now')) AND
      strftime('%m',visiteddate) = strftime('%m',date('now'))

Приведенный выше запрос на выборку дает мне правильный результат, только если одна деревня посещается только раз в месяц. Но есть возможность, что пользователь может посещать одну и ту же деревню максимум два раза в месяц.

Это грубая структура моей таблицы:

indexcard_no   villageid     visiteddate
1                   1         15/12/2018

2                   1         15/12/2018

3                   1         15/12/2018

4                   2         16/12/2018

5                   2         16/12/2018

6                   1         30/12/2018

7                   1         30/12/2018

Теперь результат, который я хочу получить, - это значение villageid за месяц = ​​12, должно быть 3. Но мой запрос на выборку дает count = 2 как iam, используя DISTINCT.

1 Ответ

0 голосов
/ 15 января 2019

Причина, по которой вы получаете результат 2 , заключается в том, что существует только 2 идентификаторов различных деревень 1 и 2 (согласно к данным, которые вы показали)

Кроме того, strftime вернет ноль для дат в формате ДД / ММ / ГГ, поскольку это не распознанный формат даты. Даты должны быть в формате ГГГГ-ММ-ДД (или в другом распознанном формате).

SQL как понял SQLite - Функции даты и времени - Строки времени

возможно, то, что вы ищете: -

SELECT count(DISTINCT villageid||visiteddate) AS villages_visited 
FROM indexcard

Это объединит идентификатор деревни с датой для предложения DISTINCT, поэтому каждая комбинация идентификатора посещения и даты будет считаться DISTINCT, и, следовательно, результатом будет 3 из ваших данных.


Рабочий пример: -

SELECT * FROM indexcard;
SELECT count(DISTINCT villageid||visiteddate) AS villages_visited 
FROM indexcard

Результаты: -

1-й запрос всех строк: -

enter image description here

  • обратите внимание на дополнительный столбец из-за неправильной даты, указанной в вопросе.

2-й запрос: -

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...