首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TSQL -从下一个相邻行填充记录

TSQL -从下一个相邻行填充记录
EN

Stack Overflow用户
提问于 2012-12-06 23:31:03
回答 2查看 384关注 0票数 1

电流输出

代码语言:javascript
复制
Activity            FromTime                ToTime
-------------------------------------------------------------------
STOPPED INSIDE POI  2012-11-14 01:08:46.000 2012-11-14 01:19:46.000
MOVING INSIDE POI   2012-11-14 01:20:46.000 2012-11-14 01:21:46.000
MOVING OUTSIDE POI  2012-11-14 01:22:46.000 2012-11-14 01:22:46.000
STOPPED OUTSIDE POI 2012-11-14 01:23:46.000 2012-11-14 01:23:46.000
MOVING OUTSIDE POI  2012-11-14 01:24:46.000 2012-11-14 01:25:46.000

预期输出

代码语言:javascript
复制
Activity            FromTime                ToTime
-------------------------------------------------------------------
STOPPED INSIDE POI  2012-11-14 01:08:46.000 2012-11-14 01:20:46.000
MOVING INSIDE POI   2012-11-14 01:20:46.000 2012-11-14 01:22:46.000
MOVING OUTSIDE POI  2012-11-14 01:22:46.000 2012-11-14 01:23:46.000
STOPPED OUTSIDE POI 2012-11-14 01:23:46.000 2012-11-14 01:24:46.000
MOVING OUTSIDE POI  2012-11-14 01:24:46.000 2012-11-14 01:25:46.000

有什么简单的方法可以做到这一点吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-06 23:42:51

这对你来说应该是可行的:

代码语言:javascript
复制
UPDATE table1
SET ToTime = join_table.newToTime
FROM (
  SELECT t2.FromTime target, MIN(t1.FromTime) newToTime 
  FROM table1 t1 
  JOIN table1 t2 ON t1.FromTime > t2.FromTime
  GROUP BY t2.FromTime) join_table
WHERE FromTime = join_table.target

基本上,您正在寻找大于当前行的最小FromTime -并将其用作ToTime的新值。请注意,最后一行不会被更新,因为找不到匹配的更大的FromTime

票数 1
EN

Stack Overflow用户

发布于 2012-12-06 23:46:44

代码语言:javascript
复制
;with a as
(
select Activity, FromTime, ToTime, 
row_number() over (order by FromTime) rn from <yourtable>
)
select a.Activity, a.FromTime, coalesce(b.FromTime, a.ToTime) ToTime
from a left join a b on a.rn = b.rn - 1
order by a.rn
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13746975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档