2016-09-28 30 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; 

它使用DISTINCT ON只保留第一行中的hive和一天的每個組合。爲了確保我們保留的第一行也是最新的一行,我們還按照反向時間順序排序。

+0

嗯,這是一個聰明的解決方案,謝謝。我試圖把我的其他作品完全放在一起。 – Azathoth