2011-01-18 1 views
0

Попытка создать отчет для нашей системы поддержки билетов, и я пытаюсь получить 2 результата в отчете, которые показывают скользящее среднее количество билетов, открытых за день, и сколько их было закрыто за день.Как я могу определить среднее количество элементов в нашей базе данных SQLite на 24-часовой период?

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

Мой друг дал мне этот вопрос:

SELECT AVG(ticket_count) 
FROM (SELECT COUNT(*) AS ticket_count FROM tickets 
GROUP BY DATE(created_at, '%Y'), DATE(created_at, '%m'), DATE(created_at, '%d')) AS ticket_part 

Но это не казалось, работать для меня. Все, что я получаю, - это единственный результат с количеством билетов, созданных в прошлом году.

ответ

0

Средняя часть вашего запроса сворачивает таблицу в одну строку, поэтому в внешней части нет ничего, на что можно было бы группировать. Трудно точно сказать, что вам нужно, не видя схему для ticket_count, но догадка я бы попробовать это:

SELECT 
    AVG(CAST(TicketsOpened AS REAL)) -- The cast to REAL ensures that { 1, 2 } averages to 1.5 rather than 1 
FROM 
    (
    SELECT 
    CAST(created_at AS DATE) AS Day -- The cast to DATE truncates any time element; if you're storing date alone, you can omit this 
    COUNT(*) AS TicketsOpened 
    FROM 
    ticket_count 
    GROUP BY 
    CAST(created_at AS DATE) 
) AS X 

Надежда, что помогает!

+0

Wow, нет типа Дата в Sqlite? Для реалов? Если вы используете текстовые поля для своих дат, используйте «LEFT (created_as, 10)» вместо «CAST (created_at AS DATE)». –

+1

Нет типа даты, но есть функция 'DATE' *, с которой вы можете передать строку« ГГГГ-ММ-ДД ЧЧ: ММ: СС »и получить« ГГГГ-ММ-ДД ». – dan04

+0

Результат тоже не кажется правильным. Когда я запускаю запрос, результатом я получаю 1443.333. Проблема в том, что в базе данных есть ~ 4300 билетов, которые охватывают течение 1 года 2 месяца, так что это определенно не среднесуточный ... больше похоже на ежеквартальный средний показатель. – dashif

1

Здесь не то, что, наконец, работал для меня:

SELECT round(CAST(AVG(TicketsOpened) AS REAL), 1) as DailyOpenAvg 
FROM 
(SELECT date(created_at) as Day, COUNT(*) as TicketsOpened 
FROM tickets 
GROUP BY date(created_at) 
) AS X