在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”的行的data_crea之间为每对“idobject,iduser”,我想另外将EXTRACT(WEEK FROM data_crea))作为“周”,将结果分组为“周”。我的问题主要是关于执行具有相同idobject,相同iduser和不同类型的两行之间的时间戳排序差异。
编辑: 这里有一些样本数据
和sqlfiddle链接http://sqlfiddle.com/#!12/6cd64/2
答案 0 :(得分:1)
您正在寻找的是两个子选择的 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
我按周和时间戳的顺序排序。周数基于'own_task'。
的一周这假设' owned_task'正好有一个行。一个用于' fwd_task'每(iduser, idobject)
,而不是每周一个。您的规范留有解释空间。