简体   繁体   中英

SQL Server query for calculating time duration for column containing multiple datetime entries against order number and order state

I need a T-SQL query for calculating time duration for column containing multiple datetime entries against order number and order state.

Example:

在此处输入图片说明

I need the query to find out total time duration for each order number. Please note there can be multiple entries against order numbers.

For multiple Order number Entries (egC8P0070), Order by event_time_t DESC & Then..

(Duration = (RESUME - HOLD) + (RESUME - HOLD) + ... )

Expected Result:

在此处输入图片说明

Assuming the "resume" and "hold" have no duplicates, you can use lead() to get the next value and then aggregate:

select order_number_s,
       sum(datediff(second, event_time_t, next_event_time_t)) as total_duration
from (select t.*,
             lead(event_time_t) over (partition by order_number_s order by event_time_t) as next_event_time_t
      from t
      where order_state_s in ('HOLD', 'RESUME')
     ) t
where order_state_s = 'HOLD'
group by order_number_s;

'where you have a condition that implies 'starting' eg Resume, find the next condition that happens that ceases action for that order_number - here I've used CROSS APPLY to order future events by time, and take the first to come along (sorry I had to switch ASC for DESC, was a mistake first time0

    select y.order_number_s, SUM(DATEDIFF(s,y.event_time_t,dq.event_time_t)) AS S  FROM YourTable y 
        CROSS APPLY 
            (SELECT TOP 1 y2.event_time_t 
                                FROM YourTable y2 
                                    WHERE y2.order_number_s = y.order_number_s 
                                            AND y2.event_time_t >= y.event_time_t 
                                            AND y2.order_state_s IN ('hold','end') 
                                            ORDER BY event_time_t ASC
            ) DQ
        WHERE y.order_state_s IN ('resume', 'start')
        GROUP BY y.order_number_s

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM