2016-09-28 2 views
1

많은 센서에서 제공하는 데이터 컬렉션이 있으며 특정 시간대의 센서 당 마지막 값을 가져와야합니다.마지막 날이 아닌 시간대를 선택하십시오.

모든 기기가 GEO에 위치하므로 적절한 날짜가 필요합니다.

CREATE TABLE public.dt_weight(
    hive character(20) NOT NULL, 
    hiveconnection integer, 
    instant timestamp with time zone NOT NULL, 
    weight integer, 
    optweight integer, 
    CONSTRAINT dt_weight_pkey PRIMARY KEY (hive, instant) 
) 

그리고 쿼리 :

가 여기에 참여 테이블의

SELECT w1.* 
    FROM dt_weight w1 
    JOIN (
     SELECT hive, DATE_TRUNC('day', instant AT TIME ZONE 'pst') AS moment, 
      MAX(instant) AT TIME ZONE 'pst' AS last 
     FROM dt_weight 
     WHERE weight IS NOT NULL AND hive = '002C0055700833024E45' 
     GROUP BY DATE_TRUNC('day', instant AT TIME ZONE 'pst'), hive 
    ) w2 
    on (w1.instant = w2.last AND w1.hive=w2.hive) 
WHERE w1.hive = '002C0055700833024E45' 
ORDER BY moment 

그 결과 (하이브, 순간, 마지막) :

"002C0055700833024E45";932890;"2015-11-23 23:55:42+01";27800; 
"002C0055700833024E45";933006;"2015-11-25 23:56:02+01";27770; 
"002C0055700833024E45";933065;"2015-11-26 23:56:22+01";27610; 

순간과 마지막이 반환됩니다 시간대가없는 타임 스탬프과 많은 레코드가 누락되었습니다! 하위 쿼리 만 사용하면 더 많은 값을 얻을 수 있습니다.

SELECT hive, DATE_TRUNC('day', instant AT TIME ZONE 'pst') AS moment, 
    MAX(instant) AT TIME ZONE 'pst' AS last 
FROM dt_weight 
WHERE weight IS NOT NULL AND hive = '002C0055700833024E45' 
GROUP BY DATE_TRUNC('day', instant AT TIME ZONE 'pst'), hive 
ORDER BY last 

"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 23:57:17" 
"002C0055700833024E45";"2015-11-19 00:00:00";"2015-11-19 23:58:12" 
"002C0055700833024E45";"2015-11-20 00:00:00";"2015-11-20 23:52:12" 
"002C0055700833024E45";"2015-11-21 00:00:00";"2015-11-21 23:53:03" 
"002C0055700833024E45";"2015-11-22 00:00:00";"2015-11-22 23:55:47" 
"002C0055700833024E45";"2015-11-23 00:00:00";"2015-11-23 23:55:42" 
"002C0055700833024E45";"2015-11-24 00:00:00";"2015-11-24 23:56:02" 
"002C0055700833024E45";"2015-11-25 00:00:00";"2015-11-25 23:56:02" 
"002C0055700833024E45";"2015-11-26 00:00:00";"2015-11-26 23:56:22" 

일 18 ~ 22 및 24 일이 표시되지 않습니다. 왜?!? 내 고객 시간대는 CEST입니다. 이 쿼리는 더 큰 계획의 일부분을 의미한다고 언급 할 필요가 있습니다. 완성도를 들어

여기에 소스 데이터의 조각이다 :

SELECT hive, DATE_TRUNC('day', instant AT TIME ZONE 'pst') AS moment, instant AT TIME ZONE 'pst', weight 
FROM dt_weight 
WHERE weight IS NOT NULL AND hive = '002C0055700833024E45' 
ORDER BY instant 

"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 03:04:57";3540 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 03:05:17";3540 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 06:47:27";0 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 06:57:27";0 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 07:07:27";0 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 07:17:27";0 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 07:27:27";0 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 07:37:27";0 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 07:47:27";0 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 07:57:27";0 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 08:07:27";0 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 08:17:27";0 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 08:27:27";0 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 08:37:27";0 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 08:47:27";0 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 08:57:27";0 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 09:07:27";0 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 09:17:27";0 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 09:27:27";0 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 09:37:27";0 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 09:47:27";0 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 09:57:27";27940 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 10:07:27";27940 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 10:17:27";27950 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 10:27:27";27960 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 10:37:27";27980 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 10:47:27";27950 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 10:57:27";27950 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 11:07:27";27970 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 11:17:27";27960 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 11:27:27";27980 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 11:37:27";27970 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 11:47:27";27980 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 11:57:27";27980 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 12:07:27";28000 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 12:17:27";27970 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 12:27:27";28010 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 12:37:27";28000 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 12:47:27";28000 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 12:57:27";28000 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 13:07:27";27990 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 13:17:27";27990 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 13:27:27";27990 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 13:37:27";28000 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 13:47:27";28020 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 13:57:23";28000 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 14:07:23";28010 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 14:17:23";27980 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 14:27:23";27980 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 14:37:23";27990 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 14:47:23";27990 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 14:57:23";28000 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 15:07:23";28000 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 15:17:23";27990 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 15:27:23";27980 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 15:37:23";27990 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 15:47:23";28020 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 15:57:23";28010 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 16:07:23";28000 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 16:17:23";27960 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 16:27:23";27990 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 16:37:23";27990 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 16:47:23";27970 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 16:57:23";27990 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 17:07:23";27980 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 17:17:23";27980 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 17:27:23";27980 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 17:37:23";28010 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 17:47:23";27970 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 17:57:23";27980 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 18:07:23";28010 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 18:17:23";28030 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 18:27:23";27980 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 18:37:23";28000 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 18:47:23";28000 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 18:57:23";28000 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 19:07:23";28040 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 19:17:23";28030 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 19:27:23";28000 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 19:37:23";28010 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 19:47:23";27980 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 19:57:23";27980 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 20:07:23";28010 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 20:17:23";27980 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 20:27:23";28010 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 20:37:23";28040 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 20:47:23";28000 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 20:57:17";28000 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 21:07:17";28050 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 21:17:17";28020 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 21:27:17";28000 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 21:37:17";28020 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 21:47:17";28020 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 21:57:17";28010 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 22:07:17";28030 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 22:17:17";28000 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 22:27:17";28030 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 22:37:17";28010 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 22:47:17";28000 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 22:57:17";28010 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 23:07:17";28040 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 23:17:17";28020 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 23:27:17";28000 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 23:37:17";28010 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 23:47:17";28020 
"002C0055700833024E45";"2015-11-18 00:00:00";"2015-11-18 23:57:17";28010 
"002C0055700833024E45";"2015-11-19 00:00:00";"2015-11-19 00:07:17";28030 
"002C0055700833024E45";"2015-11-19 00:00:00";"2015-11-19 00:17:17";28010 
"002C0055700833024E45";"2015-11-19 00:00:00";"2015-11-19 00:27:17";28010 

답변

1

이 하나를 시도

SELECT 
    DISTINCT ON (hive, moment) 
    *, DATE_TRUNC('day', instant AT TIME ZONE 'pst') AS moment 
FROM dt_weight 
ORDER BY hive, moment DESC, instant DESC; 

그것은 hive과 일의 각 조합에 대해 첫 번째 행을 유지하기 위해 DISTINCT ON를 사용합니다. 우리가 유지하는 첫 번째 행이 최신 행인지 확인하기 위해 역순으로 정렬합니다.

+0

음, 이것은 하나의 스마트 솔루션입니다. 감사합니다. 나는 다른 조각들을 모두 넣으려고하고있다. – Azathoth

관련 문제