Bạn có thể sử dụng cả YEAR(timestamp)
và WEEK(timestamp)
và sử dụng cả hai biểu thức này trong SELECT
và GROUP BY
mệnh đề.
Không quá trang nhã, nhưng có chức năng ...
Và tất nhiên, bạn cũng có thể kết hợp hai phần ngày này trong một biểu thức duy nhất, tức là một cái gì đó như
SELECT CONCAT(YEAR(timestamp), '/', WEEK(timestamp)), etc...
FROM ...
WHERE ..
GROUP BY CONCAT(YEAR(timestamp), '/', WEEK(timestamp))
Chỉnh sửa :Như Martin đã chỉ ra
bạn cũng có thể sử dụng YEARWEEK(mysqldatefield)
, mặc dù đầu ra của nó không thân thiện với mắt như công thức dài hơn ở trên.
Chỉnh sửa 2 [3 năm rưỡi sau!]:
YEARWEEK(mysqldatefield)
với đối số thứ hai tùy chọn ( mode
) được đặt thành 0 hoặc 2 có lẽ là cách tốt nhất để tổng hợp bằng hoàn thành tuần (nghĩa là bao gồm cả những tuần kéo dài từ ngày 1 tháng 1), nếu đó là điều mong muốn. YEAR() / WEEK()
cách tiếp cận được đề xuất ban đầu trong câu trả lời này có tác dụng tách dữ liệu tổng hợp cho "phân tầng" như vậy hai tuần trong hai tuần:một với năm cũ, một với năm mới.
Cắt giảm hàng năm, với chi phí là có tới hai tuần một phần, một ở hai cuối, thường được mong muốn trong kế toán, v.v. và cho rằng YEAR() / WEEK()
cách tiếp cận tốt hơn.