Как создать рассчитанное поле даты в правильном порядке (MySQL) - PullRequest
0 голосов
/ 19 января 2020

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

Теперь я могу сделать запрос, подобный этому:

SELECT 
    YEAR( ERRDATE ) AS YEAR,
    MONTH ( ERRDATE ) AS MONTH,
    WEEK ( ERRDATE ) AS WEEK,
    COUNT( DISTINCT ( ERRMSG ) ) AS ErrorCount 

(GROUP BY CLAUSE OMITTED)

Но этот запрос дает мне три столбца (ГОД, МЕСЯЦ, НЕДЕЛЯ), которые мне не нужны.

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

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

Например, этот подход не работает правильно :

CONCAT(YEAR(ERRDATE), MONTH(ERRDATE), WEEK(ERRDATE)) as THEDATE

Итак, как мне получить одно вычисленное поле из поля tiemstamp в правильном порядке?

Заранее большое спасибо,

Ответы [ 2 ]

0 голосов
/ 19 января 2020

Ваш запрос должен быть:

SELECT 
    DATE_FORMAT(ERRDATE,"%Y,%m,%U") AS Period,
    COUNT( DISTINCT ( ERRMSG ) ) AS ErrorCount
FROM YOUR_TABLE
GROUP BY Period;

Подробнее о DATE_FORMAT function

0 голосов
/ 19 января 2020

Если ваш текущий запрос уже дает желаемый результат, просто включите его в подзапрос

SELECT CONCAT ( year, month, week) as period, ErrorCount
FROM (
    SELECT YEAR ( ERRDATE ) AS YEAR,
           MONTH ( ERRDATE ) AS MONTH,
           WEEK ( ERRDATE ) AS WEEK,
           COUNT( DISTINCT ( ERRMSG ) ) AS ErrorCount
    ...
   ) as t
...