2016-10-19 3 views
2

У меня возникла проблема с тем, как этот запрос возвращает данные. timestamp возвращает правильное значение, и newpost возвращает правильные данные, но разрешенные сообщения и закрытые сообщения не вернутся правильно. Проблема, с которой я сталкиваюсь, у меня был экземпляр сегодня, когда кто-то закрыл кучу билетов сегодня, но поскольку они были старше, чем то, что было найдено за последние 7 дней (это делалось для графиков), они не учитывали их, m используя созданный как порядок по группам. Вещь создана - это дата, когда она была создана как timestamp для диаграммы и как время создания для билета, а также newpost.mysql COUNT() с CASE

В конце дня 18-го должны иметь 12 newposts, 1 solved и 22 closed но не работает

SELECT 
    DATE(created) timestamp, 
    COUNT(created) newpost, 
    COUNT(CASE WHEN DATE(closed) AND (sent = 0 OR sent = 1) THEN closed END) solvedpost, 
    COUNT(CASE WHEN DATE(closed) AND (sent = 2) THEN closed END) closedpost 
FROM 
    tickets 
GROUP BY DATE(created) 
ORDER BY DATE(created) DESC 
LIMIT 7 

SAMPLE DATA: билеты ---

| post_id| sent |  created  |  closed 
| 546nby | 2 | 2016-09-23 19:58:46 | 2016-10-18 19:00:53 | 
| 540r72 | 2 | 2016-09-22 19:33:07 | 2016-10-18 18:00:56 | 
| 54jjc2 | 2 | 2016-09-26 07:41:45 | 2016-10-18 18:00:54 | 
| 5720p8 | 2 | 2016-10-12 02:55:35 | 2016-10-18 18:00:52 | 
| 57a5qo | 2 | 2016-10-13 13:09:54 | 2016-10-18 18:00:50 | 
| 4zp83k | 2 | 2016-08-26 15:40:55 | 2016-10-18 14:00:47 | 
| 4zpu3c | 2 | 2016-08-26 17:36:19 | 2016-10-18 14:00:45 | 
| 545qvv | 2 | 2016-09-23 17:03:08 | 2016-10-18 13:01:17 | 
| 5475fv | 2 | 2016-09-23 21:41:17 | 2016-10-18 13:01:15 | 
| 549u2z | 2 | 2016-09-24 12:01:35 | 2016-10-18 13:01:13 | 
| 54ct4l | 2 | 2016-09-25 00:07:39 | 2016-10-18 13:01:11 | 
| 54gksl | 2 | 2016-09-25 19:07:58 | 2016-10-18 13:01:09 | 
| 54ippx | 2 | 2016-09-26 03:15:33 | 2016-10-18 13:01:07 | 
| 54mxvf | 2 | 2016-09-26 21:09:21 | 2016-10-18 13:01:05 | 
| 54yhfh | 2 | 2016-09-28 20:35:32 | 2016-10-18 13:01:03 | 
| 55gxw7 | 2 | 2016-10-02 04:58:23 | 2016-10-18 13:01:01 | 
| 55l2sz | 2 | 2016-10-03 00:11:01 | 2016-10-18 13:00:59 | 
| 55ozq6 | 2 | 2016-10-03 18:04:24 | 2016-10-18 13:00:57 | 
| 55txmx | 2 | 2016-10-04 15:09:11 | 2016-10-18 13:00:55 | 
| 55vi46 | 2 | 2016-10-04 20:06:39 | 2016-10-18 13:00:53 | 
| 55yw80 | 2 | 2016-10-05 10:56:29 | 2016-10-18 13:00:51 | 
| 561wzj | 2 | 2016-10-05 21:26:43 | 2016-10-18 13:00:49 | 
| 56fzlm | 0 | 2016-10-08 07:25:22 | 2016-10-18 13:00:45 | 
| 56sjln | 1 | 2016-10-10 15:34:01 | 2016-10-18 01:00:48 | 
| 57luzw | 1 | 2016-10-15 12:34:50 | 2016-10-17 18:00:44 | 
| 56tlp8 | 1 | 2016-10-10 18:44:46 | 2016-10-17 16:00:44 | 
| 578e6y | 0 | 2016-10-13 03:56:29 | 2016-10-17 05:00:47 | 
| 56931q | 1 | 2016-10-07 02:01:46 | 2016-10-17 04:00:44 | 
| 55wjpf | 1 | 2016-10-04 23:38:30 | 2016-10-16 23:00:47 | 
| 56tye6 | 1 | 2016-10-10 19:45:46 | 2016-10-16 23:00:45 | 
| 56wvge | 1 | 2016-10-11 07:07:50 | 2016-10-16 23:00:43 | 
| 57sfd6 | 2 | 2016-10-16 17:16:28 | 2016-10-16 18:00:36 | 

@ drapp

Results 
--- 
| timestamp | newpost | solvedpost | closedpost | 
| 2016-10-19 | 4 | 0 | 0 | 
| 2016-10-18 | 12 | 0 | 0 | 
| 2016-10-17 | 8 | 0 | 0 | 
| 2016-10-16 | 6 | 0 | 1 | 
| 2016-10-15 | 8 | 1 | 0 | 
| 2016-10-14 | 11 | 2 | 1 | 
| 2016-10-13 | 12 | 3 | 1 | 

Результаты разбитого запроса Heres The results

+0

Pls поделиться выборочные данные с нами, нет никакого способа, мы можем предположить, что, возможно, пошли неправильно с запросом без него. – Shadow

+0

Я уточнил, что сожалею об этом. –

ответ

1

Хорошо, я ДУМАЮ, Я понимаю, чего вы хотите, и я уточню. Надеюсь, мое письмо поможет вам объяснить и будущие должности.

Для ваших данных у вас есть билеты при создании, при закрытии и состоянии закрытия.

Мне нужно получить сводку на основе КАЖДОГО ДНЯ рассматриваемой деятельности. Поэтому, даже если билет, возможно, был создан 9 октября и закрыт 18 октября, мне нужно, чтобы закрытая дата была показана на 18-й краткой записи.

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

Таким образом, скорректированный запрос в

SELECT 
     DATE(T1.created) DateActivity, 
     COUNT(T1.*) newpost, 
     MAX(COALESCE(ClosedActivity.ClosedEntries, 0)) as ClosedEntries, 
     MAX(COALESCE(ClosedActivity.ClosedPost, 0)) as ClosedPosts, 
     MAX(COALESCE(ClosedActivity.SolvedPost, 0)) as SolvedPosts 
    FROM 
     tickets T1 
     LEFT JOIN 
     (select 
       DATE(closed) DateClosed, 
       COUNT(*) as ClosedEntries, 
       SUM(case when sent = 2 then 1 else 0 end) as ClosedPost, 
       SUM(case when sent = 0 OR sent = 1 then 1 else 0 end) as SolvedPost 
       from 
       tickets 
       where 
       closed >= date_add(current_date(), interval -7 day) 
       GROUP BY 
       DATE(closed)) ClosedActivity 
      ON 
       DATE(T1.Created) = ClosedActivity.DateClosed 
    where 
     T1.created >= date_add(current_date(), interval -7 day) 
    GROUP BY 
     DATE(T1.created) 
    ORDER BY 
     DATE(T1.created) DESC 
    LIMIT 7 

Уведомления Я применил математику даты вычесть 7 дней от текущего. Таким образом, он захватывает активность, когда билет был создан в течение последних 7 дней. Если ваши данные имеют многолетние данные, они будут пережевывать все это, ТОГДА вернутся только самые последние 7. Я начинаю только с последних 7 дней активности.

Поскольку закрытый билет никогда не может быть раньше, чем когда он был создан, это должно быть квалифицировано в течение 7 дней.

Итак, теперь с отдельной строкой в ​​дате во внутреннем запросе я применяю MAX() этого результата, так как он никогда не изменится в зависимости от количества внешних записей созданных билетов. В противном случае движок может указывать на столбцы, не являющиеся частью предложения group by, которые не являются агрегатными столбцами.

Я ДУМАЮ, что это то, что вы ищете.

+0

Я просто попробовал это и их результаты для этого –

+0

@AlexBloom, huh?!? – DRapp

+0

lol жаль, что урезал мой ответ, когда я печатал, думаю. Это может быть на правильном пути, но не работает по назначению 18 должны иметь следующее, если все работает '12 newposts', 1' solved' и 22 'closed' результатов запроса --- | временная метка | newpost | solvepost | закрытая почта | | - | -: | -: | -: | | 2016-10-19 | 4 | 0 | 0 | | 2016-10-18 | 12 | 0 | 0 | | 2016-10-17 | 8 | 0 | 0 | | 2016-10-16 | 6 | 0 | 1 | | 2016-10-15 | 8 | 1 | 0 | | 2016-10-14 | 11 | 2 | 1 | | 2016-10-13 | 12 | 3 | 1 | –

0

ДАТА (закрытые) возвращает дату не логическое, вы должны рассмотреть что-то вроде:

closed>=curdate() 

, чтобы покрыть сегодня даты и избежать запуска значения полей с помощью функции

+0

попробовал это, и он не сделал то, что мне нужно, чтобы сделать –

0

Изменить

COUNT(CASE WHEN DATE(closed) AND (sent = 2) THEN closed END) closedpost 

в

SUM(DATE(closed) = DATE(created) AND (sent = 2)) closedpost 

(То же самое для другого счетчика.)