Giả sử rằng:
-
bạn đang chạy Postgres
-
một khách hàng nhất định luôn có chính xác hai hàng trong bảng
-
hour
thuộc loại dữ liệu giống ngày tháng
Sau đó, một tùy chọn là sử dụng generate_series()
với một phép nối bên, như vậy:
select t.customer_id, x.hour
from (
select customer_id, min(hour) min_hour, max(hour) max_hour
from mytable
group by customer_id
) t
cross join lateral generate_series(min_hour, max_hour, '1 hour') x(hour)
order by t.customer_id, x.hour
Bản trình diễn trên DB Fiddlde :
customer_id | hour :---------- | :------------------ X | 2019-04-01 13:00:00 X | 2019-04-01 14:00:00 X | 2019-04-01 15:00:00 X | 2019-04-01 16:00:00 X | 2019-04-01 17:00:00 Y | 2019-04-01 17:00:00 Y | 2019-04-01 18:00:00 Y | 2019-04-01 19:00:00