Tôi đồng ý với câu trả lời của Lieven, hãy tạo một bảng chứa tất cả các tháng bạn có thể yêu cầu và sử dụng bảng đó để "THAM GIA TRÁI" vào bảng kết quả của bạn. Hãy nhớ rằng, đây là một bảng thực sự nhỏ, chỉ có 365 (ish) hàng mỗi năm dữ liệu bạn có ... Và bạn có thể dễ dàng viết một số mã để điền vào bảng này lúc đầu
Chúng tôi làm điều này ở đây và nó mang lại rất nhiều lợi ích, ví dụ:hãy tưởng tượng một bảng dữ liệu hàng tháng với các trường sau (và bất kỳ trường nào khác mà bạn có thể nghĩ đến!) Được điền đầy đủ cho tất cả các tháng trong một phạm vi nhất định;
- Ngày (Ví dụ:2009-04-01)
- Ngày (Ví dụ:1)
- Ngày trong tuần (Ví dụ:Thứ Tư)
- Tháng (Ví dụ:4)
- Năm (Ví dụ:2009)
- Năm tài chính (Ví dụ:2009/10)
- Quý tài chính (Ví dụ:Quý 1 năm 2009)
- Quý theo lịch (Ví dụ:Quý 2 năm 2009)
Sau đó, kết hợp điều này với truy vấn của bạn ở trên, như sau;
SELECT `DT`.`myYear`, `DT`.`myMonth`, AVG(`myTable`.`value1`) as avg_value_1, AVG(`myTable`.`value2`) as avg_value_2 FROM `dateTable` as DT LEFT JOIN `myTable` ON `dateTable`.`myDate` = `myTable`.`save_date` WHERE `dateTable`.`myDate` BETWEEN '2009-01-01' AND '2009-07-01' GROUP BY `DT`.`myYear`, `DT`.`myMonth`
Có thể có một số lỗi trong mã SQL của tôi vì tôi không thể tạo bảng kiểm tra, nhưng hy vọng bạn sẽ nhận được mã chính và thay đổi phù hợp với nhu cầu của mình!
Sử dụng điều này, bạn có thể thay đổi mệnh đề "GROUP BY" của mình thành bất kỳ mệnh đề nào bạn có trong bảng "dateTable", điều này có thể cho phép bạn dễ dàng báo cáo theo Quý tài chính, Tháng, Ngày, Ngày trong tuần, v.v.
Hy vọng điều đó sẽ hữu ích!