MS SQL Server Query Data Funções ao MySQL

sql_newbie:

Eu tenho esta consulta MS SQL Server:

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);

Agora eu estou tendo dificuldade em converter essa consulta para MySQL especialmente esta parte:

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

Até agora, aqui está o que eu convertido de consulta MS SQL Server para consulta MySQL:

DATEPART(MONTH, si.score_date)

para

EXTRACT(MONTH FROM si.score_date)

Por favor me ajude como eu estou em minha fase de aprendizagem. Muito obrigado.

GMB:

Esta expressão T-SQL:

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

Dá-lhe o primeiro dia do mês, 3 meses atrás (a partir de hoje 30 março, isso é 01 de dezembro).

No MySQL você pode obter o mesmo resultado assim:

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

Além disso, EXTRACT(MONTH FROM si.score_date)pode ser encurtar como MONTH(si.score_date)(a MONTH()existir tanto em função MySQL e TSQL, pela maneira). Mas nota que, presumivelmente, você quer manter a parte do ano, bem como, no caso de seus spreads de dados sobre o ano severl.

Eu ia escrever sua consulta como:

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'));

Acho que você gosta

Origin http://10.200.1.11:23101/article/api/json?id=395713&siteId=1
Recomendado
Clasificación