2013-02-08 8 views
13

내가 실행하는 웹 서비스에 대한 사용자 액세스 /보기 로그를 저장하는 테이블이 있습니다. 시간을 타임 스탬프로 추적하지만 집계보고를 할 때는 시간이 아니라 하루를 중요하게 생각합니다.타임 스탬프가 아닌 날짜별로 그룹화하는 타임 스탬프

나는 현재 다음 쿼리를 실행 해요 : 조건이 있지만,이 질문에 문제가되지해야하는 위치 종종 다른있다

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 

. 내가 Postgres를 사용하고 있지만 다른 언어로 작동하는 기능이 무엇이든간에 사용한다고 가정합니다.

날짜별로 뷰 수를 계산하는 파이썬 스크립트로 결과를 가져 오지만, 데이터베이스가 그룹화되어 나를 고려할 수 있다면 나에게 훨씬 더 의미가 있습니다.

하루에 분류하여 시간을 무시하도록하려면 어떻게 제거해야하나요?

답변

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

PostgreSQL 바로 가기 :'date_trunc ('day', user_logs.timestamp) '대신'user_logs.timestamp :: date'. –

+0

둘 다 감사합니다 :) – Teifion

+4

@Igor':: date'에 대한 캐스트가 타임 존 정보를 잃어 버리는 반면,'date_trunc'는 그렇지 않습니다. 이는 2 년 동안 같은 날을 비교하고 그 날이 한 시간대에서 다른 시간대로 변경 될 때 중요 할 수 있습니다. –