SqlServer 相邻数据(时间上相邻) 相邻状态 数据合并
2014-03-19 00:46
309 查看
原始数据
检索目标
实践过程
-- 如果有临时表就删除该临时表IF EXISTS(SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'#T') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
BEGIN
DROP TABLE #T
END
-- 创建临时表
CREATE TABLE #T(
T_NO int,
T_Status varchar(30),
TTime datetime,
);
-- 测试数据
INSERT INTO #T
SELECT 1,'开','2014-03-18 00:00:00' UNION ALL
SELECT 1,'关','2014-03-18 10:00:00' UNION ALL
SELECT 1,'关','2014-03-18 13:00:00' UNION ALL
SELECT 1,'开','2014-03-18 16:00:00' UNION ALL
SELECT 2,'开','2014-03-18 00:00:00' UNION ALL
SELECT 2,'开','2014-03-18 13:00:00' UNION ALL
SELECT 2,'关', '2014-03-18 16:00:00';
SELECT * FROM #T
-- 检索过程
DECLARE @SqlString varchar(max);
SET @SqlString = 'select ROW_NUMBER() over(order by T_NO,TTime) as RowID,T_NO,T_status,TTime from #T';
EXEC(@SqlString);
SET @SqlString = 'select '
+ ' t1.*, t2.TTime as TEndTime'
+ ' from (' + @SqlString + ') t1 '
+ ' left join (' + @SqlString +' ) t2 '
+ ' on t2.RowID = t1.RowID + 1 and t1.T_NO = t2.T_NO and t1.T_status = t2.T_status'
;
EXEC(@SqlString);
SET @SqlString = 'select '
+ ' T_NO,T_status,TTime '
+ ' from (' + @SqlString + ') t1 '
+ ' where TEndTime is null'
EXEC(@SqlString);
相关文章推荐
- sqlserver中将几条数据合并为一条数据
- sqlserver 将多行数据查询合并为一条数据
- SQLServer查询一天时间内的数据
- SqlServer中日期和时间数据类型及函数
- 2011-09-07[sqlserver查询时间字段为今天的数据]
- SqlServer实现oracle10g的 wmsys.wm_concat()/使用自连接、for xml path('')和stuff合并显示多行数据到一行中
- sqlserver 将一个字段下的多行语句合并成一条数据
- SQLServer 将两行数据合并到一行
- SqlServer中日期和时间数据类型及函数/高精度获取时间
- 石子合并(一) 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 有N堆石子排成一排,每堆石子有一定的数量。现要将N堆石子并成为一堆。合并的过程只能每次将相邻的两堆
- SqlServer_合并多个递归查询数据(CTE)
- sqlserver 触发器/计算两个时间的间隔天数/查询倒数第二条数据
- 状态为恢复中的SQLServer 数据修复方法
- sqlserver中如何提取datetime格式数据中的日期或时间?
- Access与SqlServer数据类型比较,timestamp时间戳详解
- SqlServer合并两张相同结构表的数据
- Android实例demo1之查看手机内存状态、时间数据大小格式化
- sqlserver合并DataTable并排除重复数据的通用方法分享
- gridview问题解答 :按钮的Enalbe状态 / 首页\尾页\上一页等 / 显示短时间,年\月\日 / 数据库存是1和0,显示为男和女等!
- Sql:多行合并一行以及多条数据取时间最早的那条