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 中得到的是时间戳差异,以秒为单位严格区分类型为“fwd_task”的行的 data_crea 和类型为“owned_task”的行的每对“idobject,iduser”的 data_crea,我想要也将 EXTRACT(WEEK FROM data_crea)) 作为“周”,将结果按“周”分组。我的问题主要是关于在具有相同 idobject、相同 iduser 和不同类型的两行之间执行时间戳排序差异。

编辑:这里有一些示例数据

样本数据

和 sqlfiddle 链接http://sqlfiddle.com/#!12/6cd64/2

4

1 回答 1

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”的周数。

这假设每个 'owned_task'一行,'fwd_task'有一行(iduser, idobject),而不是每周一行。您的规范为解释留下了空间。

于 2013-01-24T17:06:05.997 回答