我有客户支持数据,显示客户 ID、客户支持票证的 ID 号、输入票证的时间以及客户支持代表记录他们提供的支持服务的时间。有些票证需要多个支持实例,有些客户有多个票证
客户_ID | 门票 | 门票_入场_时间 | 服务文档时间 |
---|---|---|---|
1 | 10 | 2022年1月10日20:45 | 2022/1/11 08:00 |
1 | 10 | 2022年1月10日20:45 | 2022年1月11日12:30 |
1 | 10 | 2022年1月10日20:45 | 2022年1月16日10:30 |
2 | 11 | 2022年2月15日16:30 | 2022年2月15日17:10 |
2 | 11 | 2022年2月15日16:30 | 2022年2月17日19:45 |
1 | 22 | 2022年1月18日10:20 | 2022年1月20日09:00 |
1 | 22 | 2022年1月18日10:20 | 2022年1月21日11:40 |
我想按客户 ID、工单和进入时间对数据进行分组,以显示第一个服务文档时间和最后一个服务文档时间,如下所示:
客户_ID | 门票 | 门票_入场_时间 | 首次服务时间 | 最后服务时间 |
---|---|---|---|---|
1 | 10 | 2022年1月10日20:45 | 2022/1/11 08:00 | 2022年1月16日10:30 |
2 | 11 | 2022年2月15日16:30 | 2022年2月15日17:10 | 2022年2月17日19:45 |
1 | 22 | 2022年1月18日10:20 | 2022年1月20日09:00 | 2022年1月21日11:40 |
我已经尝试过:
select customer_id, ticket, ticket_entry_time, min(serv_doc_time) as first_serv_time,
max(serv_doc_time) as last_serv_time
from table
GROUP BY customer_id, ticket, ticket_entry_time;
我正在寻求有关如何对查询进行分区的帮助,以便每个票证的first_serv_time大于ticket_entry_time。 谢谢!
是的,您可以使用分区,如下代码:
WITH RankedSupport AS (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY Customer_ID, Ticket, Ticket_entry_Time ORDER BY Serv_doc_time) AS rn_asc,
ROW_NUMBER() OVER (PARTITION BY Customer_ID, Ticket, Ticket_entry_Time ORDER BY Serv_doc_time DESC) AS rn_desc
FROM CustomerSupport
)
SELECT
Customer_ID,
Ticket,
Ticket_entry_Time,
MIN(CASE WHEN rn_asc = 1 THEN Serv_doc_time END) AS first_serv_time,
MAX(CASE WHEN rn_desc = 1 THEN Serv_doc_time END) AS last_serv_time
FROM RankedSupport
GROUP BY Customer_ID, Ticket, Ticket_entry_Time
ORDER BY Ticket, Customer_ID, Ticket_entry_Time;
这是示例小提琴链接