这应该工作。
;WITH CTE(
[event_time],
[status])
AS (
SELECT
CAST('1/01/2011 5:07:34' AS DATETIME) ,
'Running'
UNION ALL
SELECT
'1/01/2011 5:14:22',
'Stopped'
UNION ALL
SELECT
'2/01/2011 13:13:21',
'Running'
UNION ALL
SELECT
'2/01/2011 14:14:22',
'Stopped'
UNION ALL
SELECT
'3/01/2011 13:13:21',
'Running'
UNION ALL
SELECT
'3/01/2011 14:14:22',
'Stopped'
)
, cte_Running
AS (
SELECT
*
FROM CTE
WHERE [CTE].[status] = 'Running'
)
, cte_Stopped
AS (
SELECT
*
FROM CTE
WHERE [CTE].[status] = 'Stopped'
)
SELECT
CONVERT(VARCHAR(10), [r].[event_time], 101) AS [date] ,
DATEDIFF(MINUTE, [r].[event_time], [s].[event_time]) AS [runtime_mins]
FROM cte_Running AS r
INNER JOIN cte_Stopped AS s
ON CAST(r.event_time AS DATE) = CAST(s.event_time AS DATE)