Как я могу усреднить количество элементов в нашей базе данных SQLite по 24-часовому периоду? - PullRequest
0 голосов
/ 19 января 2011

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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 20 января 2011

Вот что наконец-то сработало для меня:

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
0 голосов
/ 19 января 2011

Средняя часть вашего запроса сворачивает таблицу в одну строку, поэтому во внешней части нечего группировать. Трудно сказать точно, что вам нужно, не видя схемы для 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

Надеюсь, это поможет!

...