2017-02-15 8 views
0

У меня есть таблица, состоящая из поля даты и поля штрих-кода; Я хочу, чтобы число штрих-кодов было сгруппировано по дням за предыдущий месяц.SQLite strftime Group От

Это выглядело, как это будет работать:

 
SELECT 
COUNT(*) AS count, 
strftime('%d-%m-%Y',date) AS day 
FROM barcodes 
WHERE date >= datetime('now', '-1 month') 
GROUP BY day 
ORDER BY date ASC; 

Но это дает мне неправильные отсчеты. Например:

 
341|30-01-2017 
274|31-01-2017 
288|01-02-2017 
332|02-02-2017 
224|03-02-2017 
35|04-02-2017 
1009|06-02-2017 
1481|07-02-2017 
1626|08-02-2017 
507|09-02-2017 
428|10-02-2017 
125|11-02-2017 
1838|13-02-2017 
2591| 

Принимая во внимание:

 
SELECT COUNT(*) FROM barcodes WHERE date LIKE '2017-02-10%'; 
579 

Если я это сделать:

 
SELECT 
COUNT(*) AS count, 
strftime('%d-%m-%Y',date) AS day 
FROM barcodes 
WHERE date LIKE '2017-02-10%' 
GROUP BY day 
ORDER BY date ASC; 

я получаю:

 
428|10-02-2017 
151| 

Так что мой вопрос: почему SQLite обеспечивая результат как две строки, когда я использую strftime()?

ответ

1

%d-%m-%Y не является одним из supported date formats, поэтому сравнения не работают должным образом, и любая из встроенных функций даты возвращает NULL.

+0

Рекомендации по использованию% Y-% m-% d , я попробовал: 'SELECT MAX (дата), COUNT (*) как граф, STRFTIME ('% Y-% m-% d', дата), как день ОТ штрихкодов ГДЕ дата, как '2017-02-10' % GROUP BY день ЗАКАЗ BY date ASC; ' Но это все еще похоже на разделение счета на этот день: ' 2017-02-10 16: 11: 23 | 428 | 2017-02-10 2017-02-10 9: 59: 06 | 151 | ' – Sean

+0

У вас есть недопустимые даты в базе данных. –

+0

Я думаю, что вы правы! Для 2017-02-10 у меня есть 151 дата, у которой нет часа, отформатированного как двузначный (без начального нуля). Спасибо! – Sean

Смежные вопросы