Tôi có một bảng cơ sở dữ liệu mà trông giống như sau:MySQL: Tuần phạm vi ngày từ số tuần trong một truy vấn
| id | clock | info
----------------------------------------------
| 1 | 1262556754 | some info
| 2 | 1262556230 | some other info
| 3 | 1262556988 | and another
| 4 | 1262555678 | and some more
Nó chứa các bản ghi log và một dấu thời gian unix, khi đăng nhập này đã được viết. Những gì tôi cần, là để có được một báo cáo hàng tuần, về có bao nhiêu hồ sơ đăng nhập đã có trong mỗi tuần. Đây là một câu hỏi mà tôi đã viết:
SELECT
DATE_FORMAT(FROM_UNIXTIME(clock), "%U") AS week
count(*) as cnt
FROM logs
WHERE DATE_FORMAT(FROM_UNIXTIME(clock), "%Y") = '2010'
GROUP BY week
này đưa ra một kết quả như thế này:
| week | cnt
-------------------------------
| 1 | 55
| 2 | 134
| 4 | 765
| 20 | 65
Tuyệt vời! Nhưng những gì tôi muốn thấy, là một phạm vi ngày như 08 Feb 2010 00:00 - 15 Feb 2010 00:00
, vì vậy tập hợp kết quả sẽ trông như thế này:
| day_start | day_end | cnt
---------------------------------------------------------
| 08 Feb 2010 00:00 | 15 Feb 2010 00:00 | 55
| 15 Feb 2010 00:00 | 22 Feb 2010 00:00 | 76
| 22 Feb 2010 00:00 | 01 Mar 2010 00:00 | 756
Có cách nào để làm điều này?
Cách tiếp cận đó sẽ không hoạt động tốt nếu bạn có dữ liệu từ các năm khác nhau trong cùng một bảng - '% U' cho số tuần (nơi Chủ nhật là ngày đầu tiên của tuần) - ngày chủ nhật đầu tiên trong năm 2009 sẽ là 1, giống như ngày chủ nhật đầu tiên trong năm 2010. Bạn có thể cần một cách tiếp cận khác. Hãy xem http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function%5Fyearweek –
Báo cáo của tôi là năm cụ thể, tôi đã chỉnh sửa câu hỏi –