590
社区成员
发帖
与我相关
我的任务
分享
DECLARE @t TABLE(id INT,T VARCHAR(20),code int)
INSERT INTO @t(id,t,code) VALUES
(323,'20161003185623',21),
(324,'20161003185958',30),
(323,'20161003193445',21),
(324,'20161004120908',30),
(323,'20161004160808',20)
SELECT * FROM @t;
;WITH cte AS (
SELECT id,SUBSTRING(t,1,4)+'-'+SUBSTRING(t,5,2)+'-'+SUBSTRING(t,7,2)+' '+SUBSTRING(t,9,2)+':'+SUBSTRING(t,11,2)+':'+SUBSTRING(t,13,2) AS t,code FROM @t
)
SELECT id,code,MIN(t) st,MAX(t) et FROM cte GROUP BY id,code ORDER BY st
;WITH tb(ID,t,loc) AS
(
SELECT 323,'a',21 UNION ALL
SELECT 324,'b',30 UNION ALL
SELECT 323,'c',21 UNION ALL
SELECT 324,'d',30 UNION ALL
SELECT 323,'e',20 UNION ALL
SELECT 324,'f',34 UNION ALL
SELECT 323,'g',20 UNION ALL
SELECT 324,'h',34 UNION ALL
SELECT 323,'i',21 UNION ALL
SELECT 323,'j',21 UNION ALL
SELECT 324,'k',30 UNION ALL
SELECT 324,'l',30
),a AS(
SELECT *,RANK()OVER(PARTITION BY id,loc ORDER BY t) AS rn FROM tb
)
SELECT a1.id,a1.loc,a1.t+' - '+a2.t FROM a AS a1
LEFT JOIN a AS a2 ON a1.id=a2.id AND a1.loc=a2.loc AND a2.rn=a1.rn+1
WHERE a1.rn%2=1
ORDER BY id,a1.t
/*
id loc
----------- ----------- -----
323 21 a - c
323 20 e - g
323 21 i - j
324 30 b - d
324 34 f - h
324 30 k - l
*/