2013-02-08 1 views
13

Tôi có một bảng lưu trữ nhật ký truy cập/xem người dùng cho dịch vụ web mà tôi chạy. Nó theo dõi thời gian như là một dấu thời gian mặc dù tôi đang tìm kiếm khi tôi làm báo cáo tổng hợp tôi chỉ quan tâm đến ngày, không phải là thời gian.Ghi thời gian nhóm theo ngày, không theo thời gian

Tôi hiện đang chạy các truy vấn sau đây:

SELECT user_logs.timestamp 
    FROM user_logs 
     WHERE user_logs.timestamp >= %(timestamp_1)s 
      AND user_logs.timestamp <= %(timestamp_2)s 
       ORDER BY user_logs.timestamp 

Có thường khác, nơi điều kiện nhưng họ không nên quan trọng đối với câu hỏi này. Tôi đang sử dụng Postgres nhưng tôi cho rằng bất kỳ tính năng nào được sử dụng sẽ hoạt động ở các ngôn ngữ khác.

Tôi kéo kết quả vào một tập lệnh Python đếm số lượt xem mỗi ngày nhưng nó sẽ có ý nghĩa hơn với tôi nếu cơ sở dữ liệu có thể nhóm và đếm cho tôi.

Làm cách nào để tách nó ra để nó sẽ nhóm theo ngày và bỏ qua thời gian?

Trả lời

28
SELECT date_trunc('day', user_logs.timestamp) "day", count(*) views 
FROM user_logs 
WHERE user_logs.timestamp >= %(timestamp_1)s 
    AND user_logs.timestamp <= %(timestamp_2)s 
group by 1 
ORDER BY 1 
+21

Phím tắt PostgreSQL: 'user_logs.timestamp :: date' thay vì' date_trunc ('day', user_logs.timestamp) '. –

+0

Cảm ơn cả hai :) – Teifion

+4

@Igor Lưu ý rằng một diễn viên vào ':: date' sẽ mất thông tin múi giờ trong khi' date_trunc' thì không. Điều đó có thể quan trọng khi bạn muốn so sánh cùng ngày trong hai năm và ngày đó thay đổi từ múi giờ này sang múi giờ khác. –