车牌 时间 车速 保持秒数
1 2011-01-13 11:20:30 50 3
1 2011-01-13 11:20:33 63 5
1 2011-01-13 11:20:38 78 6
1 2011-01-13 12:20:44 62 7
1 2011-01-13 12:20:51 75 6
1 2011-01-13 12:20:57 90 5规定是1秒钟内速度增加超过12公里/小时就算急加速
现在每条记录就相当于每秒的记录
在连续时间类2条记录的差大于12的话都算为一次急加速
按这要求上面的数据应该得到急加速为2次
现在要求的东西是急加速的总次数
以及得到车牌,开始时间,开始速度(KM/H),结束时间,结束速度(KM/H),平均加速度(KM/H/S)
开始时间就是date字段的值
结束时间就是开始时间加上这一次急加速保持秒数的累加
下面给出表和一点测试数据
create table TB_VDRDATA
(
carid int,--------车牌
carspeed int,---------车速
data datetime,----------时间
bcms float------------保持秒数
)
insert into TB_Vdrdata values(1,'50','2011-01-13 11:20:30','3')
insert into TB_Vdrdata values(1,'63','2011-01-13 11:20:33 ','5')
insert into TB_Vdrdata values(1,'78','2011-01-13 11:20:38','6')
insert into TB_Vdrdata values(1,'62','2011-01-13 12:20:44','7')
insert into TB_Vdrdata values(1,'75','2011-01-13 12:20:51','6')
insert into TB_Vdrdata values(1,'90','2011-01-13 12:20:57','5')
1 2011-01-13 11:20:30 50 3
1 2011-01-13 11:20:33 63 5
1 2011-01-13 11:20:38 78 6
1 2011-01-13 12:20:44 62 7
1 2011-01-13 12:20:51 75 6
1 2011-01-13 12:20:57 90 5规定是1秒钟内速度增加超过12公里/小时就算急加速
现在每条记录就相当于每秒的记录
在连续时间类2条记录的差大于12的话都算为一次急加速
按这要求上面的数据应该得到急加速为2次
现在要求的东西是急加速的总次数
以及得到车牌,开始时间,开始速度(KM/H),结束时间,结束速度(KM/H),平均加速度(KM/H/S)
开始时间就是date字段的值
结束时间就是开始时间加上这一次急加速保持秒数的累加
下面给出表和一点测试数据
create table TB_VDRDATA
(
carid int,--------车牌
carspeed int,---------车速
data datetime,----------时间
bcms float------------保持秒数
)
insert into TB_Vdrdata values(1,'50','2011-01-13 11:20:30','3')
insert into TB_Vdrdata values(1,'63','2011-01-13 11:20:33 ','5')
insert into TB_Vdrdata values(1,'78','2011-01-13 11:20:38','6')
insert into TB_Vdrdata values(1,'62','2011-01-13 12:20:44','7')
insert into TB_Vdrdata values(1,'75','2011-01-13 12:20:51','6')
insert into TB_Vdrdata values(1,'90','2011-01-13 12:20:57','5')
解决方案 »
- 任职时间和离职时间都有,如何统计工作天数(离职时间-任职时间)
- convert next韩文乱码
- 求相同ID记录日期最大的一条记录
- ',' 附近有语法错误
- 多变连接查询不重复字段信息
- 如何把两个表结构完全相同(名称也相同)的sqlsever库,合并为一个库??急!在线等
- 关于image数据类型,有没有“直接”插入数据库的办法,而不通过用VB或别的程序
- 求助:请大虾指点:Oracle中,select语句的where子句中有没有“大小写不敏感的”!?
- 百分请教这样的查询试图如何写? 查查 谢谢
- matlab画图
- sql master..xp_cmdshell问题
- 求救!!!数据库授权与回收简单问题!!!
;WITH maco
AS ( SELECT ROW_NUMBER() OVER ( ORDER BY data ) AS rowid ,
*
FROM TB_VDRDATA
)
SELECT a.carid ,
a.carspeed - b.carspeed 加速
FROM maco a
LEFT JOIN maco b ON a.rowid = b.rowid + 1
/*
carid 加速
----------- -----------
1 NULL
1 13
1 15
1 -16
1 13
1 15
*/
--分明是加速了4次吗?
;WITH maco
AS ( SELECT ROW_NUMBER() OVER ( ORDER BY data ) AS rowid ,
*
FROM TB_VDRDATA
)
SELECT a.carid ,
SUM(CASE WHEN a.carspeed - b.carspeed > 12 THEN 1
ELSE 0
END) 加速次数
FROM maco a
LEFT JOIN maco b ON a.rowid = b.rowid + 1
GROUP BY a.carid
/*
carid 加速次数
----------- -----------
1 4
*/
;WITH maco
AS ( SELECT ROW_NUMBER() OVER ( ORDER BY data ) AS rowid ,
*
FROM TB_VDRDATA
)
SELECT a.carid ,
CASE WHEN a.carspeed - b.carspeed > 12 THEN 1
ELSE 0
END AS col1 INTO #t
FROM maco a
LEFT JOIN maco b ON a.rowid = b.rowid + 1
SELECT * FROM #T
DROP TABLE #t
/*
carid col1
----------- -----------
1 0
1 1
1 1
1 0
1 1
1 1
*/加了个临时表,可以做连续统计
;WITH maco
AS ( SELECT ROW_NUMBER() OVER ( ORDER BY data ) AS rowid ,
*
FROM TB_VDRDATA
)
SELECT a.carid ,
CASE WHEN a.carspeed - b.carspeed > 12 THEN 1
ELSE 0
END AS col1
INTO #t
FROM maco a
LEFT JOIN maco b ON a.rowid = b.rowid + 1
DECLARE @price INT ;
SET @price = 0
UPDATE #T
SET @price = col1 = CASE WHEN col1 = 1
AND @price = 0 THEN 1
ELSE 0
END
SELECT carid ,
SUM(col1) AS 加速次数
FROM #T
GROUP BY carid
DROP TABLE #t
/*
carid 加速次数
----------- -----------
1 2
*/
我再问下
怎么得到车牌,开始时间,开始速度(KM/H),结束时间,结束速度(KM/H),平均加速度(KM/H/S)
开始时间就是date字段的值
结束时间就是开始时间加上这一次急加速保持秒数的累加
总次数是出来了
可以现在需求又加上了一个
要得到每辆车每一次急加速的
车牌,开始时间,开始速度(KM/H),结束时间,结束速度(KM/H),平均加速度(KM/H/S)
开始时间就是date字段的值
结束时间就是开始时间加上这一次急加速保持秒数的累加请maco_wang在看看,我星期天在家里琢磨了半天没出来,家里没网没法发问。
WITH maco
AS ( SELECT ROW_NUMBER() OVER ( ORDER BY data ) AS rowid ,
*
FROM TB_VDRDATA
)
SELECT a.carid ,
SUM(CASE WHEN a.carspeed - b.carspeed > 12 THEN 1
ELSE 0
END) 加速次数
FROM maco a
LEFT JOIN maco b ON a.rowid = b.rowid + 1
GROUP BY a.carid
这个是你写的 我现在改了下不知道怎么是不是正确
WITH maco AS ( SELECT ROW_NUMBER() OVER (ORDER BY vehicleid,date ) AS rowid,* FROM TB_VDRDATA)
SELECT a.vehicleid ,SUM(CASE WHEN a.carspeed - b.carspeed > 12 THEN 1 ELSE 0 END) cnt
FROM maco a LEFT JOIN maco b ON a.rowid = b.rowid + 1
where a.date between '2010-12-20 11:30:00' and '2010-12-29 11:30:00'
GROUP BY a.vehicleid我只是在order by中加了vehicleid字段也就是车牌字段 他的数据就会少很多 不知道回事
我刚刚琢磨出来了