我正在寻找一种在两个不同的行中连接时间戳的方法,例如,我有这个表:
我希望它按工作日分组,并将min(start_hour)与max(start_hour)连接起来,得到类似的东西
我正在使用此查询来检索第一个图像结果
答案 0 :(得分:0)
如果提供的信息,下面的查询应该为您提供所需的信息。我做了一些假设。那是' 00:00'在开始和结束时间不是有效时间,可以忽略。如果他们被认为是有效的,那么周五的输出将是&00; 00:00:00' - ' 11:30:00'。
我创建了两个CTE,一个用于开始时间,另一个用于结束时间,其中值不是00:00:00'。在CTE上添加了一个行号,这样我就可以匹配当天和row_number给你一套。
SELECT day
,array_to_string(array_agg(t.shift), ',') shifts
FROM (
WITH cte_start AS (
SELECT row_number() OVER (PARTITION BY day)
,day
,start_hour
FROM test22
WHERE start_hour <> '00:00:00'::time
)
,cte_stop AS (
SELECT row_number() OVER (PARTITION BY day)
,day
,stop_hour
FROM test22
WHERE stop_hour <> '00:00:00'::time
)
SELECT cte_start.day
,cte_start.start_hour::varchar || ' - ' || cte_stop.stop_hour::varchar AS shift
FROM cte_start
LEFT OUTER JOIN cte_stop ON cte_start.day = cte_stop.day
AND cte_start.row_number = cte_stop.row_number
) T
GROUP BY T.day
-HTH