2012-08-09 43 views
6

Mã mà tôi có cho đến nay là dưới đây: Tôi đang cố gắng để tìm ra những gì để đặt vào vị trí của tôi 's để tìm ngày bắt đầu của quý ngày nằm trongLàm thế nào để có được ngày đầu tiên của một quý trong 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; 

tôi?. đã dùng thử Google nhưng không có kết quả.

Một ví dụ về đầu ra sẽ là:

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

Bạn có thể thêm (các) ví dụ về dự kiến ​​đầu ra? – Jocelyn

+0

Ý tưởng hay Jocelyn, cảm ơn! Tôi đã chỉnh sửa bài đăng của mình để bao gồm một ví dụ. – richie

Trả lời

16

thử điều này:

Để có được ngày bắt đầu của việc sử dụng quý hiện tại này:

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

Vì vậy, truy vấn của bạn sẽ được :

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

Tôi nghĩ rằng đã thực hiện các trick, tôi chỉ cần thử nghiệm nó ngay bây giờ. Cảm ơn Joe! – richie

+1

Điều này có thể được khái quát hóa để tìm ngày bắt đầu của một quý khác với ngày hiện tại, bằng cách thay đổi CURDATE() cho một chuỗi ngày tháng. –

+1

Nếu bạn cần ngày cuối cùng của quý hiện tại, hãy trừ đi 'INTERVAL 1 DAY' thay vì' INTERVAL 1 QUARTER'. –

Các vấn đề liên quan