MS SQL Дата запроса к серверу работает до MySQL - PullRequest
0 голосов
/ 30 марта 2020

У меня есть MS SQL Запрос к серверу:

SELECT  DATEPART(MONTH, si.score_date),
        MAX(si.score_value)
FROM score_info AS si
WHERE si.score_date >= DATEADD(MONTH, -3, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0))
GROUP BY DATEPART(MONTH, si.score_date);

Сейчас мне трудно преобразовать этот запрос в MySQL, особенно в эту часть:

DATEADD(MONTH, -3, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0))

Итак, вот что я преобразовал из запроса MS SQL Server в запрос MySQL:

DATEPART(MONTH, si.score_date)

в

EXTRACT(MONTH FROM si.score_date)

Пожалуйста, помогите мне, поскольку я учусь сцена. Большое вам спасибо.

1 Ответ

0 голосов
/ 30 марта 2020

Это выражение T- SQL:

DATEADD(MONTH, -3, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0))

Дает вам первый день месяца, 3 месяца, go (по состоянию на сегодня 30 марта, то есть 1 декабря).

В MySQL вы можете получить тот же результат, например, так:

DATE_FORMAT(CURRENT_DATE, '%Y-%m-01') - INTERVAL 3 MONTH

Кроме того, EXTRACT(MONTH FROM si.score_date) можно сократить как MONTH(si.score_date) (функция MONTH() существует как в MySQL, так и в * Т SQL, кстати). Но обратите внимание, что, по-видимому, вы также хотите сохранить часть года, если ваши данные будут распространяться в течение нескольких лет.

Я бы написал ваш запрос следующим образом:

SELECT  
    DATE_FORMAT(si.score_date, '%Y-%m-01') year_month,
    MAX(si.score_value) max_score
FROM score_info AS si
WHERE si.score_date >= DATE_FORMAT(CURRENT_DATE, '%Y-%m-01') - INTERVAL 3 MONTH
GROUP BY DATE_FORMAT(si.score_date, '%Y-%m-01'));
...