-1
A
回答
0
好,这里是一些工作陈述
declare @t TABLE(id INT, dt DATETIME, sp int)
INSERT INTO @t VALUES(1, '2015-01-17 12:00:05', 12)
INSERT INTO @t VALUES(1, '2015-01-17 12:00:06', 0)
INSERT INTO @t VALUES(1, '2015-01-17 12:00:07', 0)
INSERT INTO @t VALUES(1, '2015-01-17 12:00:08', 0)
INSERT INTO @t VALUES(1, '2015-01-17 12:00:09', 5)
INSERT INTO @t VALUES(1, '2015-01-17 12:00:10', 8)
INSERT INTO @t VALUES(1, '2015-01-17 12:00:11', 0)
INSERT INTO @t VALUES(1, '2015-01-17 12:00:12', 0)
INSERT INTO @t VALUES(1, '2015-01-17 12:00:13', 0)
INSERT INTO @t VALUES(1, '2015-01-17 12:00:14', 7)
INSERT INTO @t VALUES(2, '2015-01-17 12:00:05', 10)
INSERT INTO @t VALUES(2, '2015-01-17 12:00:06', 0)
INSERT INTO @t VALUES(2, '2015-01-17 12:00:07', 0)
INSERT INTO @t VALUES(2, '2015-01-17 12:00:08', 0)
INSERT INTO @t VALUES(2, '2015-01-17 12:00:09', 12)
INSERT INTO @t VALUES(2, '2015-01-17 12:00:10', 0)
INSERT INTO @t VALUES(2, '2015-01-17 12:00:11', 0)
INSERT INTO @t VALUES(2, '2015-01-17 12:00:12', 10)
;
WITH cte1
AS (SELECT a.id ,
a.dt AS stdt ,
b.dt AS endt ,
a.sp ,
a.rn
FROM (SELECT * ,
1
+ ROW_NUMBER() OVER (PARTITION BY id ORDER BY dt) AS n ,
ROW_NUMBER() OVER (ORDER BY GETDATE()) AS rn
FROM @t t1
) a
LEFT JOIN (SELECT * ,
ROW_NUMBER() OVER (PARTITION BY id ORDER BY dt) AS n
FROM @t t1
) b ON b.id = a.id
AND b.n = a.n
),
cte2
AS (SELECT t1.id ,
t1.stdt ,
ISNULL(t1.endt, GETDATE()) AS endt ,
t1.sp ,
t1.rn ,
SUM(t2.sp) AS sum
FROM cte1 t1
INNER JOIN cte1 t2 ON t1.rn >= t2.rn
GROUP BY t1.id ,
t1.stdt ,
t1.endt ,
t1.sp ,
t1.rn
)
SELECT id ,
MIN(stdt) ,
MAX(stdt) ,
DATEDIFF(ss, MIN(stdt), MAX(stdt))
FROM cte2
WHERE sp = 0
GROUP BY id ,
SUM
下面是结果
1 2015-01-17 12:00:06.000 2015-01-17 12:00:08.000 2
1 2015-01-17 12:00:11.000 2015-01-17 12:00:13.000 2
2 2015-01-17 12:00:06.000 2015-01-17 12:00:08.000 2
2 2015-01-17 12:00:10.000 2015-01-17 12:00:11.000 1
您有车辆1 12:06 to 12:08
结果。但我真的认为结果应该是。如果是这样,只是改变
SELECT id ,
MIN(stdt) ,
MAX(stdt) ,
DATEDIFF(ss, MIN(stdt), MAX(stdt))
FROM cte2
WHERE sp = 0
GROUP BY id ,
SUM
到
SELECT id ,
MIN(stdt) ,
MAX(endt) ,
DATEDIFF(ss, MIN(stdt), MAX(endt))
FROM cte2
WHERE sp = 0
GROUP BY id ,
SUM
相关问题
- 1. SQL - 按不同值分组
- 2. SQL:按值1分组,按“不”value1?
- 3. 按值组分组
- 4. 按部分值分组
- 5. 按值分组数组
- 6. 按SUM值范围分组SQL
- 7. SQL自定义按值分组
- 8. 按值分组
- 9. TS SQL - 按分组划分
- 10. 按列值分组
- 11. 按空值分组
- 12. 按MAX()值分组?
- 13. sql table不按按钮更新
- 14. 按多个值分组
- 15. 按分组的SQL组,然后按日期分组结果
- 16. 分组值按日期
- 17. SQL - 按左连接分组
- 18. 按范围分组SQL Server
- 19. 按sql分组年份
- 20. SQL:按日期分组
- 21. LINQ到SQL - 按表分组
- 22. SQL - 按不同分组
- 23. SQL按周分组日期
- 24. SQL平均分组按
- 25. SQL:按日期分组并按列求和值
- 26. SQL:按列值划分
- 27. SQL按值拆分列
- 28. SQL组按列和列值?
- 29. SQL - 2个表值按第三个未连接值分组
- 30. 想要一个SQL按值的范围在oracle中分组值
我不是在写SQL查询好,我已经尽力了,但没有成功。 – cherisys
你使用哪个版本的sql? SELECT @@ VERSION –
Microsoft SQL Server 2008(RTM) - 10.0.1600.22(X64)Jul 9 2008 14:17:44 Copyright(c)1988-2008 Windows NT 6.0上的Microsoft Corporation Enterprise Edition(64位)(Build 6002:Service Pack 2) –
cherisys