1

PostgreSQLにはテーブルがあります

CREATE TABLE cubenotification.newnotification
(
  idnewnotification serial NOT NULL,
  contratto text,
  idlocation numeric,
  typology text,
  idpost text,
  iduser text,
  idobject text,
  idwhere text,
  status text DEFAULT 'valid'::text,
  data_crea timestamp with time zone DEFAULT now(),
  username text,
  usersocial text,
  url text,
  apikey text,
  CONSTRAINT newnotification_pkey PRIMARY KEY (idnewnotification )
)

類型フィールドが「owned_task」または「fwd_task」であるとしましょう。DB から取得したいのは、"idobject,iduser" の対ごとに、類型 "fwd_task" を持つ行の data_crea と類型 "owned_task" を持つ行の data_crea の間の厳密な秒単位のタイムスタンプの違いです。 EXTRACT(WEEK FROM data_crea)) も「週」として取得し、結果を「週」でグループ化します。私の問題は主に、同じidobject、同じiduser、異なる類型を持つ2つの行の間でタイムスタンプの順序の違いを実行することです。

編集:ここにいくつかのサンプルデータがあります

サンプルデータ

および sqlfiddle リンクhttp://sqlfiddle.com/#!12/6cd64/2

4

1 に答える 1

2

あなたが探しているのは、2 つのサブセレクトの JOIN です

SELECT EXTRACT(WEEK FROM o.data_crea) AS owned_week
     , iduser, idobject
     , EXTRACT('epoch' FROM (o.data_crea - f.data_crea)) AS diff_in_sek
FROM  (SELECT * FROM newnotification WHERE typology = 'owned_task') o
JOIN  (SELECT * FROM newnotification WHERE typology = 'fwd_task')   f
                                                         USING (iduser, idobject)
ORDER  BY 1,4

->sqlfiddle

週とタイムスタンプの違いで注文します。週番号は、「owned_task」の週に基づいています。

これは、週に 1 行ではなく、「owned_task」に 1行、「fwd_task」に1(iduser, idobject)行が正確に存在することを前提としています。あなたの仕様には解釈の余地があります。

于 2013-01-24T17:06:05.997 に答える