2012-01-09 10 views
6

Tôi đang sử dụng SQL Server 2008.Cách truy vấn để nhận tổng số trong bảy ngày qua?

Tôi muốn viết truy vấn cung cấp cho tôi tổng số hoạt động trong một số ngày nhất định. Cụ thể, tôi muốn đếm tổng số phiếu bầu mỗi ngày trong bảy ngày qua.

bảng của tôi trông như thế này:

VoteID --- VoteDate -------------- Vote --- BikeID 

1   2012-01-01 08:24:25  1  1234 
2   2012-01-01 08:24:25  0  5678 
3   2012-01-02 08:24:25  1  1289 
4   2012-01-03 08:24:25  0  1234 
5   2012-01-04 08:24:25  1  5645 
6   2012-01-05 08:24:25  0  1213 
7   2012-01-06 08:24:25  1  1234 
8   2012-01-07 08:24:25  0  1125 

tôi cần kết quả của tôi trông giống như

VoteDate ---- Total 
2012-01-01 5 
2012-01-02 6 
2012-01-03 7 
2012-01-04 1 
2012-01-05 3 

suy nghĩ của tôi này là tôi phải làm một cái gì đó như thế này:

SELECT SUM(CASE WHEN Vote = 1 THEN 1 ELSE 0 END) AS Total 
FROM  Votes 
GROUP BY VoteDate 

Truy vấn này không hoạt động vì nó chỉ đếm số phiếu đã xảy ra (gần như chính xác) cùng một lúc. Tất nhiên, tôi chỉ muốn nhìn vào một ngày cụ thể. Làm thế nào để tôi thực hiện điều này?

Trả lời

10

Cast nó như là một date:

SELECT  
    cast(VoteDate as date) as VoteDate, 
    SUM(CASE WHEN Vote = 1 THEN 1 ELSE 0 END) AS Total 
FROM  Votes 
WHERE VoteDate between dateadd(day, -7, GETDATE()) and GETDATE() 
GROUP BY cast(VoteDate as date) 

cột VoteDate của bạn là một datetime, nhưng bạn chỉ muốn date phần của nó. Cách dễ nhất để thực hiện điều đó là truyền nó thành loại date. Bạn có thể đọc thêm về các kiểu ngày của SQL Server here.

Và nếu cột Vote của bạn là 1 hoặc 0, bạn chỉ có thể thực hiện sum(vote) as Total thay vì thực hiện tuyên bố case.

+2

Để thêm vào câu trả lời của Eric, bạn cũng có thể muốn thêm một mệnh đề WHERE để đầu tiên lấy dữ liệu cho chỉ kéo dài 7 (hoặc N) ngày. Nếu không, bạn sẽ thực hiện thao tác Nhóm trên tập hợp đầy đủ (có thể rất lớn) và sau đó chỉ nhận được dữ liệu tổng hợp trong 7 ngày (hoặc N) cuối cùng. –

+0

@WebUser - Bạn chính xác! Đã thêm :) – Eric

+0

Ngoài ra, bạn có thể đề xuất OP thay đổi 'TRƯỜNG HỢP KHI CHỌN = 1 THÌ 1 ELSE 0 END' bằng' Bỏ phiếu' hoặc bằng 'coalesce (bỏ phiếu, 0)' – danihp

3
SELECT SUM(Vote) As Total, YEAR(VoteDate),Month(VoteDate),Day(VoteDate) 
FROM Votes 
Group By YEAR(VoteDate),Month(VoteDate),Day(VoteDate) 

Some SQL Server functions rằng có thể quan tâm

Some MySQL functions rằng có thể quan tâm

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