Sử dụng Stack Overflow dữ liệu công cộng bãi, tôi đã tạo ra ba bảng đơn giản:Số lần xem trang xấp xỉ trên mỗi thẻ (hoặc nhóm thẻ) mỗi tháng có dữ liệu hạn chế?
- câu hỏi (Question_Id, VIEW_COUNT, CREATION_DATE)
- Tags (TAG_NAME)
- QuestionTags (Question_Id, TAG_NAME)
Bảng Câu hỏi có hàng trăm nghìn hàng với Creation_Date trải rộng từ một năm trước cho tới hôm nay. Nhìn qua các dữ liệu, có hai xu hướng đáng chú ý:
- Số câu hỏi Tăng bởi Thời gian - ví dụ, đã có nhiều câu hỏi trong tháng này so với ba tháng trước
- Câu hỏi xem có một cái đuôi dài - bằng cách xem các lượt xem dựa trên các tuần mở, chúng ta có thể thấy rằng hầu hết các lượt xem của câu hỏi xảy ra trong tuần đầu tiên; số tiền ít hơn trong lần thứ hai và thứ ba; và đuôi dài, liên tục trong các tuần tiếp theo
Nếu không có yếu tố nào trong số này phát sinh, nó sẽ khá tầm thường để ước tính lưu lượng truy cập cho một thẻ (hoặc nhóm thẻ) nhất định trong một tháng:
SELECT YEAR(Q.Creation_Date)
,MONTH(Q.Creation_Date)
,SUM(Q.View_Count/DATEDIFF(m,Q.Creation_Date,GETDATE()))
FROM Questions Q
JOIN QuestionTags QT
ON Q.Question_Id = QT.Question_Id
WHERE QT.Tag_Name IN ('c#','.net', ...)
GROUP BY YEAR(Q.Creation_Date), MONTH(Q.Creation_Date)
ORDER BY 1,2
Nhưng vì các yếu tố nói trên (đặc biệt là đuôi dài), tôi không chắc chắn cách xem gần đúng. Suy nghĩ của tôi là tạo ra một hàm, sử dụng công thức đuôi dài, sẽ tính toán lượt xem trong một tháng dựa trên số lượt xem hiện tại và tuần mở.
Đây là những gì tôi đã đưa ra để tìm đuôi:
DECLARE @SDTE DATETIME, @EDTE DATETIME
SELECT @SDTE = '2009-01-11' -- after new years holiday
,@EDTE = CAST(MAX([Creation_Date]) AS INT)
FROM [Questions]
SELECT [DaysOpen_Count]
,AVG([WView_Count])
FROM
(
SELECT QT.[Tag_Name],
Q.[View_Count],
[DaysOpen_Count] = DATEDIFF(DAY, Q.[Creation_Date], @EDTE),
[WView_Count] = CAST(Q.[View_Count]/(DATEDIFF(DAY, Q.[Creation_Date], @EDTE)/7.0) AS INT)
FROM [Questions] Q
INNER JOIN [QuestionTags] QT
ON Q.[Question_Id] = QT.[Question_Id]
WHERE [Tag_Name] IN ('c#','.net',...)
AND [Creation_Date] < @EDTE
) Q
GROUP BY [DaysOpen_Count]
ORDER BY 1,2
Làm thế nào tôi nên tiến hành để tạo ra truy vấn SQL này?
Mục tiêu cuối cùng là Nguyên tắc được lưu trữ sẽ nhập một chuỗi CSV và kích hoạt lượt xem trang trong sáu tháng qua cho các thẻ đó.
CẬP NHẬT Sau khi "kiếm" huy hiệu tumbleweed, tôi đã nhận ra đó là thời gian cho tiền thưởng!
Điều này trông rất gần với những gì tôi đang tìm kiếm; đối với tính chất động ... tất cả đều trung bình, đặc biệt là khi chúng ta bỏ các câu hỏi "quái dị" như http: // stackoverflow.com/questions/84556/whats-your-yêu thích-lập trình-phim hoạt hình –
Bạn có thể phải tinh chỉnh công thức, đặc biệt là V và tỷ lệ phân rã λ. Tỷ lệ phân rã cho các câu hỏi như vậy là rất thấp (1/25?). –