2010-06-10 38 views
5

Tôi đang sử dụng MySQL và tôi có bảng sau:Nhóm bởi phạm vi ngày trên tuần/tháng khoảng

| clicks | int | 
| period | date | 

Tôi muốn để có thể tạo các báo cáo như thế này, nơi các giai đoạn được thực hiện trong cuối 4 tuần:

| period | clicks | 
| 1/7 - 7/5 | 1000 | 
| 25/6 - 31/7 | .... | 
| 18/6 - 24/6 | .... | 
| 12/6 - 18/6 | .... | 

hoặc trong vòng 3 tháng qua:

| period | clicks | 
| July | .... | 
| June | .... | 
| April | .... | 

Bất kỳ ý tưởng làm thế nào để chọn các truy vấn mà có thể tạo ra equivale Phạm vi ngày và số lần nhấp chuột của nt?

+1

Bạn lưu trữ ngày của mình dưới dạng int? Trường đó trông như thế nào? – simendsjo

+0

@simendsjo Khó hiểu định dạng - Tôi nghĩ như vậy nhưng đọc trên không xuống! –

+0

xin lỗi vì sai lầm đó, đó là một tệp được gọi là khoảng thời gian có loại ngày. – khelll

Trả lời

11
 
SELECT 
WEEKOFYEAR(`date`) AS period, 
SUM(clicks) AS clicks 
FROM `tablename` 
WHERE `date` >= CURDATE() - INTERVAL 4 WEEK 
GROUP BY period 

SELECT 
MONTH(`date`) AS period, 
SUM(clicks) AS clicks 
FROM `tablename` 
WHERE `date` >= CURDATE() - INTERVAL 3 MONTH 
GROUP BY period 

+0

Đó là một kiểm tra tốt hơn cho giai đoạn này, tôi đã sửa chữa câu trả lời của tôi để phản ánh nó. – Keeper

+0

Ngoài sự tò mò, các truy vấn nên như thế nào nếu trường thời gian là một số nguyên như 20100609 tương ứng với ngày 2010-06-09. Liệu hiệu suất có tốt hơn ở loại int như vậy không? – khelll

+0

Có lẽ chỉ khi bạn cần lọc một phạm vi ngày vì bạn không thể lọc theo tuần (bạn vẫn phải truyền nó làm ngày). Và hãy nhớ chọn câu trả lời: P – Keeper

3

Trong 3 tháng cuối cùng bạn có thể sử dụng:

SELECT MONTH(PERIOD), SUM(CLICKS) 
FROM TABLE 
WHERE PERIOD >= NOW() - INTERVAL 3 MONTH 
GROUP BY MONTH(PERIOD) 

hoặc trong 4 tuần qua:

SELECT WEEK(PERIOD), SUM(CLICKS) 
FROM TABLE 
WHERE PERIOD >= NOW() - INTERVAL 4 WEEK 
GROUP BY WEEK(PERIOD) 

Mã không được kiểm tra.

+0

Tôi không biết liệu trình tối ưu hóa có hoạt động với TUẦN (Kỳ) mà không kiểm tra tất cả các ngày trong kết quả. Đó là lý do tại sao tôi muốn sử dụng WEEK (Period) AS WeekPeriod, Group by WeekPeriod – simendsjo

+0

Tôi sử dụng chủ yếu Oracle mà bạn phải nhóm theo cùng một trường bạn chọn (bạn không thể đặt tên cho trường và nhóm đó). Tôi nghĩ rằng truy vấn nội bộ là như nhau. – Keeper

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