2016-09-28 12 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

関連する問題