有意思的关于sqlserver时间的取值和计算问题
有意思的关于sqlserver时间的取值和计算问题
大云彩 发表于4个月前
有意思的关于sqlserver时间的取值和计算问题
  • 发表于 4个月前
  • 阅读 4
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

有一批数据要处理(见图片),量比较大,时间跨度有五年,而且每一个地点会重复出现,我需要查出每一个地点的起始时间(最小值)和结束时间(最大值)以及停留的时间(最大值-最小值),停留时间不足一天的按一天处理,请问使用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

 

共有 人打赏支持
粉丝 3
博文 77
码字总数 14418
×
大云彩
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: