2016-07-26 5 views
1

person_id, timestampname 테이블이 있습니다. 주어진 날짜에 주어진 시간대에있는 사람의 첫 번째 타임 스탬프를 얻기위한 쿼리를 작성하려고합니다. 당연히 FIRST_VALUE를 사용하고 하루 동안 파티셔닝을 시도했지만 왜 작동하지 않는지 확신하지 못했습니다.창 함수를 통해 첫 번째 타임 스탬프 얻기

ERROR: column "ae.timestamp" must appear in the GROUP BY clause or be used in an aggregate function 
LINE 2: SELECT first_value("timestamp") OVER w, 
         ^

어떤 아이디어 : 나에게 오류를 제공

SELECT first_value("timestamp") OVER w, 
    date_trunc('day', "timestamp" AT TIME ZONE 'US/Central') 
FROM analytics_analyticsevent as ae 
WHERE person_id=3 
GROUP BY date_trunc('day', "timestamp" AT TIME ZONE 'US/Central') 
WINDOW w as (PARTITION BY date_trunc('day', "timestamp" AT TIME ZONE 'US/Central')) 

?

+0

당신은에 의해 그룹에서 FIRST_VALUE ("타임 스탬프")를 추가해야합니다 –

답변

0

마치 top-n-per-group처럼 보입니다. 일반적으로 사람들은 다음과 같이 ROW_NUMBER를 사용

SELECT 
    "timestamp" 
    ,dt 
FROM 
    (
     SELECT 
      "timestamp" 
      ,date_trunc('day', "timestamp" AT TIME ZONE 'US/Central') AS dt 
      ,ROW_NUMBER() OVER 
       (PARTITION BY date_trunc('day', "timestamp" AT TIME ZONE 'US/Central') 
       ORDER BY "timestamp") AS rn 
     FROM analytics_analyticsevent as ae 
     WHERE person_id=3 
    ) AS T 
WHERE 
    T.rn = 1;