2012-08-09 11 views
6

Der Code, den ich bis jetzt habe, ist unten: Ich versuche herauszufinden, was an Ort und Stelle setzen meiner ist das Startdatum des Quartals zu finden das Datum in liegtWie bekomme ich das erste Quartal in 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; 

ich?. habe Google googeln versucht, aber ohne Erfolg. wäre Ihre Abfrage

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

So:

Ein Beispiel für die Ausgabe wäre:

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

Können Sie Beispiel (e) hinzufügen erwartete Ausgabe? – Jocelyn

+0

Gute Idee Jocelyn, danke! Ich habe meinen Beitrag bearbeitet, um ein Beispiel hinzuzufügen. – richie

Antwort

16

try this:

Zu dieser das Startdatum der laufenden Quartals Nutzung zu erhalten :

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

Ich denke, das hat den Trick gemacht, ich teste es gerade jetzt. Danke Joe! – richie

+1

Dies kann verallgemeinert werden, um das Anfangsdatum eines anderen Quartals als das aktuelle Datum zu finden, indem CURDATE() für eine Datumszeichenfolge geändert wird. –

+1

Wenn Sie den letzten Tag des aktuellen Quartals benötigen, subtrahieren Sie statt "INTERVALL 1 QUARTAL" durch "INTERVALL 1 TAG". –

Verwandte Themen