您的位置:首页 > 数据库

有意思的关于sqlserver时间的取值和计算问题

2017-08-21 00:00 106 查看
有一批数据要处理(见图片),量比较大,时间跨度有五年,而且每一个地点会重复出现,我需要查出每一个地点的起始时间(最小值)和结束时间(最大值)以及停留的时间(最大值-最小值),停留时间不足一天的按一天处理,请问使用sqlserver如何实现?



代码:

WITH
/* 测试数据
table1(dt,city) AS (
SELECT '2017-01-01','BJ' UNION ALL
SELECT '2017-01-02','BJ' UNION ALL
SELECT '2017-01-03','BJ' UNION ALL
SELECT '2017-01-04','BJ' UNION ALL
SELECT '2017-01-05','BJ' UNION ALL
SELECT '2017-01-06','BJ' UNION ALL
SELECT '2017-01-07','HZ' UNION ALL
SELECT '2017-01-08','HZ' UNION ALL
SELECT '2017-01-09','HZ' UNION ALL
SELECT '2017-01-10','HZ' UNION ALL
SELECT '2017-01-11','HZ' UNION ALL
SELECT '2017-01-12','HZ' UNION ALL
SELECT '2017-02-01','BJ' UNION ALL
SELECT '2017-02-02','BJ' UNION ALL
SELECT '2017-02-03','BJ' UNION ALL
SELECT '2017-02-04','BJ'
),
*/
a AS (
SELECT dt,
city,
ROW_NUMBER() OVER(ORDER BY dt) rn1,
ROW_NUMBER() OVER(ORDER BY city,dt) rn2
FROM table1
),
b AS (
SELECT rn1-rn2 seg,
city,
MIN(rn1) rn1,
MIN(dt) dt_1,
MAX(dt) dt_2
FROM a
GROUP BY rn1-rn2, city
)
SELECT city,
dt_1,
dt_2,
DATEDIFF(day,dt_1,dt_2)+1 days
FROM b
ORDER BY rn1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: