选择时间点之后的最大日期和最小日期

问题描述 投票:0回答:1

我有客户支持数据,显示客户 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。 谢谢!

sql
1个回答
0
投票

是的,您可以使用分区,如下代码:

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;

这是示例小提琴链接

© www.soinside.com 2019 - 2024. All rights reserved.