求一个sql查询【相邻两条记录做比较】

68kg 2014-03-28 11:46:00
某用户在旅行中,每到一个新地方都会立即发带有地点的状态,在同一个地方也可能会发多条状态,于是有了travel表
location date
PRC 20100101
PRC 20100102
PRC 20100104

USA 20100110
USA 20100118
UK 20100120
UK 20100120
UK 20100123
DE 20100124
FR 20100125
FR 20100201
PRC 20100203
PRC 20100203

TW 20100205

求该用户在个地点呆的天数,只计算到最后一天,
例如在PRC发了1,2,4号三条,但其于10号到了USA,最后又在PRC呆了2天,所以一共在PRC呆了11天
location days
PRC 11
USA 10
UK 4
DE 1
FR 9
TW 1
我遇到的主要问题是相邻两条记录的对比,当相邻两条记录的loaction不同时,就该计算时间差累加到上一条记录的天数中。
求助
...全文
374 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
BzTech_123 2014-03-29
  • 打赏
  • 举报
回复


; WITH CTE_Log AS (SELECT Location, [Date], ROW_Number() OVER(ORDER BY [Date]) AS RN FROM LocationLog )

SELECT S.Location, CONVERT(Decimal(7,2),SUM(S.Stay)/60.00/24.00) AS TotalDays
FROM 
(SELECT a.Location, a.[Date], DateDiff(minute, a.[Date], b.[Date]) AS Stay 
FROM CTE_Log a INNER JOIN CTE_Log b ON a.RN = b.RN-1 ) S 
GROUP BY S.Location 
唐诗三百首 2014-03-29
  • 打赏
  • 举报
回复 1

create table travel
(location varchar(10),[date] varchar(10))

insert into travel
 select 'PRC','20100101' union all
 select 'PRC','20100102' union all
 select 'PRC','20100104' union all
 select 'USA','20100110' union all 
 select 'USA','20100118' union all 
 select 'UK','20100120' union all 
 select 'UK','20100120' union all 
 select 'UK','20100123' union all 
 select 'DE','20100124' union all 
 select 'FR','20100125' union all 
 select 'FR','20100201' union all 
 select 'PRC','20100203' union all
 select 'PRC','20100203' union all
 select 'TW','20100205'


with t as
(select location,[date],row_number() over(order by [date]) 'rn'
 from travel),
u as
(select a.location,a.[date],row_number() over(order by a.rn) 'rn'
 from t a
 left join t b on a.rn=b.rn+1
 where a.location!=b.location or b.rn is null)
select location,sum(d) 'days'
from
(select a.location,isnull(datediff(d,a.[date],b.[date]),1) 'd'
 from u a
 left join u b on a.rn=b.rn-1) t
group by location
order by (select min(rn) from t c where c.location=t.location)

/*
location   days
---------- -----------
PRC        11
USA        10
UK         4
DE         1
FR         9
TW         1

(6 row(s) affected)
*/

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧