2012-08-09 24 views
6

El código que tengo hasta ahora es el siguiente: Estoy tratando de averiguar qué poner en su lugar de mi 's para encontrar la fecha de inicio de la cuarta parte de la fecha radica en¿Cómo obtengo la primera fecha de un trimestre en MySQL?

SELECT 
QUARTER(r.callDate) AS quar, 
YEAR(r.callDate) AS ryear, 
???????? AS scoreDateStart, 
(SELECT DATE (DATE_SUB(DATE_ADD(CONCAT(YEAR(r.callDate), '-01-01'), INTERVAL QUARTER(r.callDate) QUARTER), INTERVAL 1 DAY))) AS scoreDateEnd, 
group_concat(DISTINCT(r.resultId) separator ', ') AS resultIds 
FROM results AS r 
GROUP BY quar, ryear 
ORDER BY quar; 

I?. han intentado Google, pero fue en vano.

Un ejemplo de la salida sería:

'1', '2012', '2012-01-01', '2012-03-31', '57, 58, 59' 
'2', '2012', '2012-04-01', '2012-06-30', '10549, 10551, 12598' 
+0

¿Puede añadirse ejemplos de ¿Rendimiento esperado? – Jocelyn

+0

¡Buena idea Jocelyn, gracias! He editado mi publicación para incluir un ejemplo. – richie

Respuesta

16

probar esto:

para obtener la fecha de inicio del trimestre actual uso esto:

SELECT MAKEDATE(YEAR(CURDATE()), 1) + INTERVAL QUARTER(CURDATE()) QUARTER 
             - INTERVAL 1 QUARTER 

Por lo que su consulta sería :

SELECT 
QUARTER(r.callDate) AS quar, 
YEAR(r.callDate) AS ryear, 
MAKEDATE(YEAR(r.callDate), 1) + INTERVAL QUARTER(r.callDate) QUARTER - 
    INTERVAL 1 QUARTER AS scoreDateStart, 
(SELECT DATE (DATE_SUB(DATE_ADD(CONCAT(YEAR(r.callDate), '-01-01'), 
INTERVAL QUARTER(r.callDate) QUARTER), INTERVAL 1 DAY))) AS scoreDateEnd, 
group_concat(DISTINCT(r.resultId) separator ', ') AS resultIds 
FROM results AS r 
GROUP BY quar, ryear 
ORDER BY quar; 
+1

Creo que ha funcionado, solo lo estoy probando ahora. Gracias Joe! – richie

+1

Esto se puede generalizar para encontrar la fecha de inicio de un trimestre distinto de la fecha actual, cambiando CURDATE() para una cadena de fecha. –

+1

Si necesita el último día del trimestre actual, reste por "INTERVALO 1 DÍA" en lugar de "INTERVALO 1 TRIMESTRE". –

Cuestiones relacionadas