27,579
社区成员
发帖
与我相关
我的任务
分享
IF OBJECT_ID('tb') IS NOT NULL
DROP TABLE tb
GO
CREATE TABLE tb( 编号 int,开始时间 varchar(10),结束时间 varchar(10) ,类别 varchar(10) )
go
insert tb SELECT
1,'2009-7-1','2009-10-1','ee' UNION ALL SELECT
1,'2009-7-2','2009-10-20','tt' UNION ALL SELECT
2,'2009-7-3','2009-9-5','uu' UNION ALL SELECT
2,'2009-7-4',NULL,'tt' UNION ALL SELECT
2,'2009-7-5',NULL,'ii' UNION ALL SELECT
3,'2009-7-6','2009-10-8','ii' UNION ALL SELECT
3,'2009-7-7','2009-10-8','oo'
go
select t.* from tb t ,
(SELECT 编号,min(开始时间)开始时间 FROM TB T WHERE 结束时间 IS NULL group by 编号)as t1
where t.编号=t1.编号 and t.开始时间=t1.开始时间
UNION ALL
SELECT * FROM TB T WHERE
开始时间=(SELECT MAX(开始时间) FROM TB WHERE 编号=T.编号)
and 编号 not in
(SELECT 编号 FROM TB T WHERE 结束时间 IS NULL)
order by t.编号
编号 开始时间 结束时间 类别
----------- ---------- ---------- ----------
1 2009-7-2 2009-10-20 tt
2 2009-7-4 NULL tt
3 2009-7-7 2009-10-8 oo
(所影响的行数为 3 行)
IF OBJECT_ID('tb') IS NOT NULL
DROP TABLE tb
GO
CREATE TABLE tb( 编号 int,开始时间 varchar(10),结束时间 varchar(10) ,类别 varchar(10) )
go
insert tb SELECT
1,'2009-7-1','2009-10-1','ee' UNION ALL SELECT
1,'2009-7-2','2009-10-20','tt' UNION ALL SELECT
2,'2009-7-3','2009-9-5','uu' UNION ALL SELECT
2,'2009-7-4',NULL,'tt' UNION ALL SELECT
2,'2009-7-5',NULL,'ii' UNION ALL SELECT
3,'2009-7-6','2009-10-8','ii' UNION ALL SELECT
3,'2009-7-7','2009-10-8','oo'
go
select t.* from tb t ,
(SELECT 编号,min(开始时间)开始时间 FROM TB T WHERE 结束时间 IS NULL group by 编号)as t1
where t.编号=t1.编号 and t.开始时间=t1.开始时间
UNION ALL
SELECT * FROM TB T WHERE
开始时间=(SELECT MAX(开始时间) FROM TB WHERE 编号=T.编号 AND 结束时间 IS NOT NULL )
编号 开始时间 结束时间 类别
----------- ---------- ---------- ----------
2 2009-7-4 NULL tt
1 2009-7-2 2009-10-20 tt
2 2009-7-3 2009-9-5 uu
3 2009-7-7 2009-10-8 oo
(所影响的行数为 4 行)
IF OBJECT_ID('tb') IS NOT NULL
DROP TABLE tb
GO
CREATE TABLE tb( 编号 int,开始时间 varchar(10),结束时间 varchar(10) ,类别 varchar(10) )
go
insert tb SELECT
1,'2009-7-1','2009-10-1','ee' UNION ALL SELECT
1,'2009-7-2','2009-10-20','tt' UNION ALL SELECT
2,'2009-7-3','2009-9-5','uu' UNION ALL SELECT
2,'2009-7-4',NULL,'tt' UNION ALL SELECT
2,'2009-7-5',NULL,'ii' UNION ALL SELECT
3,'2009-7-6','2009-10-8','ii' UNION ALL SELECT
3,'2009-7-7','2009-10-8','oo'
go
select t.* from tb t ,
(SELECT 编号,min(开始时间)开始时间 FROM TB T WHERE 结束时间 IS NULL group by 编号)as t1
where t.编号=t1.编号 and t.开始时间=t1.开始时间
UNION ALL
SELECT * FROM TB T WHERE
开始时间=(SELECT MAX(开始时间) FROM TB WHERE 编号=T.编号 AND 结束时间=T.结束时间 AND 结束时间 IS NOT NULL )
编号 开始时间 结束时间 类别
----------- ---------- ---------- ----------
2 2009-7-4 NULL tt
3 2009-7-7 2009-10-8 oo
2 2009-7-3 2009-9-5 uu
1 2009-7-2 2009-10-20 tt
1 2009-7-1 2009-10-1 ee
(所影响的行数为 5 行)
SELECT * FROM TB T WHERE
开始时间=(SELECT MIN(开始时间) FROM TB WHERE 编号=T.编号 AND 结束时间=T.结束时间 AND 结束时间 IS NULL )
UNION ALL
SELECT * FROM TB T WHERE
开始时间=(SELECT MAX(开始时间) FROM TB WHERE 编号=T.编号 AND 结束时间=T.结束时间 AND 结束时间 IS NOT NULL )
CREATE CLUSTERED INDEX Idx1 ON TB (编号)