2012-08-09 10 views
6

Kod że mam tak daleko jest poniżej: Próbuję dowiedzieć się, co umieścić w miejscu mój 's, aby znaleźć datę rozpoczęcia kwartału data leży wJak uzyskać pierwszą datę na kwartał w 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; 

ja?. próbowałem Googling, ale bezskutecznie.

Przykładem wyjściem byłoby:

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

Czy możesz dodać przykład (y) oczekiwany wynik? – Jocelyn

+0

Dobry pomysł Jocelyn, dzięki! Zmodyfikowałem mój post, aby dołączyć przykład. – richie

Odpowiedz

16

spróbuj tego:

Aby uzyskać datę rozpoczęcia obecnego wykorzystania tej dzielnicy:

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

Więc zapytanie byłoby :

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

Myślę, że to się udało, testuję to teraz. Dzięki Joe! – richie

+1

Można to uogólnić, aby znaleźć datę rozpoczęcia kwartału innego niż bieżąca data, zmieniając CURDATE() dla ciągu daty. –

+1

Jeśli potrzebujesz ostatniego dnia bieżącego kwartału, odejmij o "INTERVAL 1 DAY" zamiast "INTERVAL 1 QUARTER". –

Powiązane problemy