27,579
社区成员
发帖
与我相关
我的任务
分享
select * from tb a where
not exists(
select * from tb
where
abs(datepart(mm,a.[计费月份]))=2
or
abs(datepart(mm,a.[计费月份]))=1) order by 用户名称,计费月份
if object_id(N'[tb]',N'U') is not null drop table [tb]
create table [tb]([用户号] varchar(6),[用户名称] varchar(11),[污水费计费度] numeric(3,2),[计费月份] datetime,[水费金额] numeric(5,2))
insert [tb]
select '000001','AAAAAAAAAAA',1.00,'2009-01-01',120.00 union all
select '000002','BBBBBBBBBBB',1.11,'2009-01-01',122.00 union all
select '000003','CCCCCCCCCCC',4.00,'2009-01-01',812.00 union all
select '000004','DDDDDDDDDDD',6.45,'2009-01-01',822.00 union all
select '000001','AAAAAAAAAAA',1.10,'2009-02-01',20.00 union all
select '000002','BBBBBBBBBBB',1.31,'2009-02-01',22.00 union all
select '000003','CCCCCCCCCCC',4.40,'2009-02-01',82.00 union all
select '000004','DDDDDDDDDDD',2.30,'2009-02-01',23.00 union all
select '000001','AAAAAAAAAAA',1.00,'2009-03-01',120.00 union all
select '000002','BBBBBBBBBBB',1.11,'2009-03-01',122.00 union all
select '000003','CCCCCCCCCCC',4.00,'2009-03-01',812.00 union all
select '000004','DDDDDDDDDDD',6.45,'2009-03-01',212.00 union all
select '000001','AAAAAAAAAAA',1.00,'2009-04-01',120.00 union all
select '000002','BBBBBBBBBBB',1.11,'2009-04-01',122.00 union all
select '000003','CCCCCCCCCCC',4.00,'2009-04-01',812.00 union all
select '000004','DDDDDDDDDDD',6.45,'2009-04-01',822.00 union all
select '000001','AAAAAAAAAAA',1.00,'2009-05-01',120.00 union all
select '000002','BBBBBBBBBBB',1.11,'2009-05-01',122.00 union all
select '000003','CCCCCCCCCCC',4.00,'2009-05-01',812.00 union all
select '000004','DDDDDDDDDDD',6.45,'2009-05-01',820.00
select * from tb where [计费月份]<>'2009-02-01' and [计费月份]<>'2009-01-01' order by [污水费计费度],[计费月份]
/*
用户号 用户名称 污水费计费度 计费月份 水费金额
-----------------------------------------------------
000001 AAAAAAAAAAA 1.00 2009-03-01 120.00
000001 AAAAAAAAAAA 1.00 2009-04-01 120.00
000001 AAAAAAAAAAA 1.00 2009-05-01 120.00
000002 BBBBBBBBBBB 1.11 2009-03-01 122.00
000002 BBBBBBBBBBB 1.11 2009-04-01 122.00
000002 BBBBBBBBBBB 1.11 2009-05-01 122.00
000003 CCCCCCCCCCC 4.00 2009-03-01 812.00
000003 CCCCCCCCCCC 4.00 2009-04-01 812.00
000003 CCCCCCCCCCC 4.00 2009-05-01 812.00
000004 DDDDDDDDDDD 6.45 2009-03-01 212.00
000004 DDDDDDDDDDD 6.45 2009-04-01 822.00
000004 DDDDDDDDDDD 6.45 2009-05-01 820.00
*/
DECLARE @TB TABLE([用户号] VARCHAR(6), [用户名称] VARCHAR(11), [污水费计费度] DECIMAL(18,2), [计费月份] DATETIME, [水费金额] DECIMAL(18,2))
INSERT @TB
SELECT '000001', 'AAAAAAAAAAA', 1.00, '2009-01-01', 120.00 UNION ALL
SELECT '000002', 'BBBBBBBBBBB', 1.11, '2009-01-01', 122.00 UNION ALL
SELECT '000003', 'CCCCCCCCCCC', 4.00, '2009-01-01', 812.00 UNION ALL
SELECT '000004', 'DDDDDDDDDDD', 6.45, '2009-01-01', 822.00 UNION ALL
SELECT '000001', 'AAAAAAAAAAA', 1.10, '2009-02-01', 20.00 UNION ALL
SELECT '000002', 'BBBBBBBBBBB', 1.31, '2009-02-01', 22.00 UNION ALL
SELECT '000003', 'CCCCCCCCCCC', 4.40, '2009-02-01', 82.00 UNION ALL
SELECT '000004', 'DDDDDDDDDDD', 2.30, '2009-02-01', 23.00 UNION ALL
SELECT '000001', 'AAAAAAAAAAA', 1.00, '2009-03-01', 120.00 UNION ALL
SELECT '000002', 'BBBBBBBBBBB', 1.11, '2009-03-01', 122.00 UNION ALL
SELECT '000003', 'CCCCCCCCCCC', 4.00, '2009-03-01', 812.00 UNION ALL
SELECT '000004', 'DDDDDDDDDDD', 6.45, '2009-03-01', 212.00 UNION ALL
SELECT '000001', 'AAAAAAAAAAA', 1.00, '2009-04-01', 120.00 UNION ALL
SELECT '000002', 'BBBBBBBBBBB', 1.11, '2009-04-01', 122.00 UNION ALL
SELECT '000003', 'CCCCCCCCCCC', 4.00, '2009-04-01', 812.00 UNION ALL
SELECT '000004', 'DDDDDDDDDDD', 6.45, '2009-04-01', 822.00 UNION ALL
SELECT '000004', 'DDDDDDDDDDD', 6.45, '2009-04-01', 822.00 UNION ALL --ADD
SELECT '000001', 'AAAAAAAAAAA', 1.00, '2009-05-01', 120.00 UNION ALL
SELECT '000002', 'BBBBBBBBBBB', 1.11, '2009-05-01', 122.00 UNION ALL
SELECT '000003', 'CCCCCCCCCCC', 4.00, '2009-05-01', 812.00 UNION ALL
SELECT '000004', 'DDDDDDDDDDD', 6.45, '2009-05-01', 820.00
SELECT *
FROM @TB AS T
WHERE EXISTS(
SELECT 1
FROM (SELECT T1.用户号,T1.污水费计费度, T1.计费月份
FROM @TB AS T1
WHERE EXISTS(SELECT 1 FROM @TB WHERE 用户号=T1.用户号 AND 污水费计费度=T1.污水费计费度 AND 计费月份 BETWEEN T1.计费月份 AND DATEADD(MONTH,2,T1.计费月份) HAVING COUNT(*)>=3)
) AS T2
WHERE T.用户号=T2.用户号 AND T.污水费计费度=T2.污水费计费度 AND T.计费月份 BETWEEN T2.计费月份 AND DATEADD(MONTH,2,T2.计费月份)
)
ORDER BY 用户号,污水费计费度,计费月份
/*
用户号 用户名称 污水费计费度 计费月份 水费金额
------ ----------- -------------------- ------------------------------------------------------ --------------------
000001 AAAAAAAAAAA 1.00 2009-03-01 00:00:00.000 120.00
000001 AAAAAAAAAAA 1.00 2009-04-01 00:00:00.000 120.00
000001 AAAAAAAAAAA 1.00 2009-05-01 00:00:00.000 120.00
000002 BBBBBBBBBBB 1.11 2009-03-01 00:00:00.000 122.00
000002 BBBBBBBBBBB 1.11 2009-04-01 00:00:00.000 122.00
000002 BBBBBBBBBBB 1.11 2009-05-01 00:00:00.000 122.00
000003 CCCCCCCCCCC 4.00 2009-03-01 00:00:00.000 812.00
000003 CCCCCCCCCCC 4.00 2009-04-01 00:00:00.000 812.00
000003 CCCCCCCCCCC 4.00 2009-05-01 00:00:00.000 812.00
000004 DDDDDDDDDDD 6.45 2009-03-01 00:00:00.000 212.00
000004 DDDDDDDDDDD 6.45 2009-04-01 00:00:00.000 822.00
000004 DDDDDDDDDDD 6.45 2009-04-01 00:00:00.000 822.00
000004 DDDDDDDDDDD 6.45 2009-05-01 00:00:00.000 820.00
(13 row(s) affected)
*/
DECLARE @TB TABLE([用户号] VARCHAR(6), [用户名称] VARCHAR(11), [污水费计费度] DECIMAL(18,2), [计费月份] DATETIME, [水费金额] DECIMAL(18,2))
INSERT @TB
SELECT '000001', 'AAAAAAAAAAA', 1.00, '2009-01-01', 120.00 UNION ALL
SELECT '000002', 'BBBBBBBBBBB', 1.11, '2009-01-01', 122.00 UNION ALL
SELECT '000003', 'CCCCCCCCCCC', 4.00, '2009-01-01', 812.00 UNION ALL
SELECT '000004', 'DDDDDDDDDDD', 6.45, '2009-01-01', 822.00 UNION ALL
SELECT '000001', 'AAAAAAAAAAA', 1.10, '2009-02-01', 20.00 UNION ALL
SELECT '000002', 'BBBBBBBBBBB', 1.31, '2009-02-01', 22.00 UNION ALL
SELECT '000003', 'CCCCCCCCCCC', 4.40, '2009-02-01', 82.00 UNION ALL
SELECT '000004', 'DDDDDDDDDDD', 2.30, '2009-02-01', 23.00 UNION ALL
SELECT '000001', 'AAAAAAAAAAA', 1.00, '2009-03-01', 120.00 UNION ALL
SELECT '000002', 'BBBBBBBBBBB', 1.11, '2009-03-01', 122.00 UNION ALL
SELECT '000003', 'CCCCCCCCCCC', 4.00, '2009-03-01', 812.00 UNION ALL
SELECT '000004', 'DDDDDDDDDDD', 6.45, '2009-03-01', 212.00 UNION ALL
SELECT '000001', 'AAAAAAAAAAA', 1.00, '2009-04-01', 120.00 UNION ALL
SELECT '000002', 'BBBBBBBBBBB', 1.11, '2009-04-01', 122.00 UNION ALL
SELECT '000003', 'CCCCCCCCCCC', 4.00, '2009-04-01', 812.00 UNION ALL
SELECT '000004', 'DDDDDDDDDDD', 6.45, '2009-04-01', 822.00 UNION ALL
SELECT '000004', 'DDDDDDDDDDD', 6.45, '2009-04-01', 822.00 UNION ALL --ADD
SELECT '000001', 'AAAAAAAAAAA', 1.00, '2009-05-01', 120.00 UNION ALL
SELECT '000002', 'BBBBBBBBBBB', 1.11, '2009-05-01', 122.00 UNION ALL
SELECT '000003', 'CCCCCCCCCCC', 4.00, '2009-05-01', 812.00 UNION ALL
SELECT '000004', 'DDDDDDDDDDD', 6.45, '2009-05-01', 820.00
SELECT *
FROM @TB AS T
WHERE EXISTS(
SELECT 1
FROM (SELECT T1.用户号,T1.污水费计费度, T1.计费月份
FROM @TB AS T1
WHERE EXISTS(SELECT 1 FROM @TB WHERE 用户号=T1.用户号 AND 污水费计费度=T1.污水费计费度 AND 计费月份 BETWEEN T1.计费月份 AND DATEADD(MONTH,2,T1.计费月份) HAVING COUNT(*)>=3)
) AS T2
WHERE T.用户号=T2.用户号 AND T.污水费计费度=T2.污水费计费度 AND T.计费月份 BETWEEN T2.计费月份 AND DATEADD(MONTH,2,T2.计费月份)
)
ORDER BY 用户号,污水费计费度,计费月份
/*
用户号 用户名称 污水费计费度 计费月份 水费金额
------ ----------- -------------------- ------------------------------------------------------ --------------------
000001 AAAAAAAAAAA 1.00 2009-03-01 00:00:00.000 120.00
000001 AAAAAAAAAAA 1.00 2009-04-01 00:00:00.000 120.00
000001 AAAAAAAAAAA 1.00 2009-05-01 00:00:00.000 120.00
000002 BBBBBBBBBBB 1.11 2009-03-01 00:00:00.000 122.00
000002 BBBBBBBBBBB 1.11 2009-04-01 00:00:00.000 122.00
000002 BBBBBBBBBBB 1.11 2009-05-01 00:00:00.000 122.00
000003 CCCCCCCCCCC 4.00 2009-03-01 00:00:00.000 812.00
000003 CCCCCCCCCCC 4.00 2009-04-01 00:00:00.000 812.00
000003 CCCCCCCCCCC 4.00 2009-05-01 00:00:00.000 812.00
000004 DDDDDDDDDDD 6.45 2009-03-01 00:00:00.000 212.00
000004 DDDDDDDDDDD 6.45 2009-04-01 00:00:00.000 822.00
000004 DDDDDDDDDDD 6.45 2009-04-01 00:00:00.000 822.00
000004 DDDDDDDDDDD 6.45 2009-05-01 00:00:00.000 820.00
(13 row(s) affected)
*/
DECLARE @TB TABLE([用户号] VARCHAR(6), [用户名称] VARCHAR(11), [污水费计费度] DECIMAL(18,2), [计费月份] DATETIME, [水费金额] DECIMAL(18,2))
INSERT @TB
SELECT '000001', 'AAAAAAAAAAA', 1.00, '2009-01-01', 120.00 UNION ALL
SELECT '000002', 'BBBBBBBBBBB', 1.11, '2009-01-01', 122.00 UNION ALL
SELECT '000003', 'CCCCCCCCCCC', 4.00, '2009-01-01', 812.00 UNION ALL
SELECT '000004', 'DDDDDDDDDDD', 6.45, '2009-01-01', 822.00 UNION ALL
SELECT '000001', 'AAAAAAAAAAA', 1.10, '2009-02-01', 20.00 UNION ALL
SELECT '000002', 'BBBBBBBBBBB', 1.31, '2009-02-01', 22.00 UNION ALL
SELECT '000003', 'CCCCCCCCCCC', 4.40, '2009-02-01', 82.00 UNION ALL
SELECT '000004', 'DDDDDDDDDDD', 2.30, '2009-02-01', 23.00 UNION ALL
SELECT '000001', 'AAAAAAAAAAA', 1.00, '2009-03-01', 120.00 UNION ALL
SELECT '000002', 'BBBBBBBBBBB', 1.11, '2009-03-01', 122.00 UNION ALL
SELECT '000003', 'CCCCCCCCCCC', 4.00, '2009-03-01', 812.00 UNION ALL
SELECT '000004', 'DDDDDDDDDDD', 6.45, '2009-03-01', 212.00 UNION ALL
SELECT '000001', 'AAAAAAAAAAA', 1.00, '2009-04-01', 120.00 UNION ALL
SELECT '000002', 'BBBBBBBBBBB', 1.11, '2009-04-01', 122.00 UNION ALL
SELECT '000003', 'CCCCCCCCCCC', 4.00, '2009-04-01', 812.00 UNION ALL
SELECT '000004', 'DDDDDDDDDDD', 6.45, '2009-04-01', 822.00 UNION ALL
SELECT '000004', 'DDDDDDDDDDD', 6.45, '2009-04-01', 822.00 UNION ALL --ADD
SELECT '000001', 'AAAAAAAAAAA', 1.00, '2009-05-01', 120.00 UNION ALL
SELECT '000002', 'BBBBBBBBBBB', 1.11, '2009-05-01', 122.00 UNION ALL
SELECT '000003', 'CCCCCCCCCCC', 4.00, '2009-05-01', 812.00 UNION ALL
SELECT '000004', 'DDDDDDDDDDD', 6.45, '2009-05-01', 820.00
SELECT *
FROM @TB AS T
WHERE EXISTS(
SELECT 1
FROM (SELECT T1.用户号,T1.污水费计费度, T1.计费月份
FROM @TB AS T1
WHERE EXISTS(SELECT 1 FROM @TB WHERE 用户号=T1.用户号 AND 污水费计费度=T1.污水费计费度 AND 计费月份 BETWEEN T1.计费月份 AND DATEADD(MONTH,2,T1.计费月份) HAVING COUNT(*)>=3)
) AS T2
WHERE T.用户号=T2.用户号 AND T.污水费计费度=T2.污水费计费度 AND T.计费月份 BETWEEN T2.计费月份 AND DATEADD(MONTH,2,T2.计费月份)
)
ORDER BY 用户号,污水费计费度,计费月份
/*
用户号 用户名称 污水费计费度 计费月份 水费金额
------ ----------- -------------------- ------------------------------------------------------ --------------------
000001 AAAAAAAAAAA 1.00 2009-03-01 00:00:00.000 120.00
000001 AAAAAAAAAAA 1.00 2009-04-01 00:00:00.000 120.00
000001 AAAAAAAAAAA 1.00 2009-05-01 00:00:00.000 120.00
000002 BBBBBBBBBBB 1.11 2009-03-01 00:00:00.000 122.00
000002 BBBBBBBBBBB 1.11 2009-04-01 00:00:00.000 122.00
000002 BBBBBBBBBBB 1.11 2009-05-01 00:00:00.000 122.00
000003 CCCCCCCCCCC 4.00 2009-03-01 00:00:00.000 812.00
000003 CCCCCCCCCCC 4.00 2009-04-01 00:00:00.000 812.00
000003 CCCCCCCCCCC 4.00 2009-05-01 00:00:00.000 812.00
000004 DDDDDDDDDDD 6.45 2009-03-01 00:00:00.000 212.00
000004 DDDDDDDDDDD 6.45 2009-04-01 00:00:00.000 822.00
000004 DDDDDDDDDDD 6.45 2009-04-01 00:00:00.000 822.00
000004 DDDDDDDDDDD 6.45 2009-05-01 00:00:00.000 820.00
(13 row(s) affected)
*/
---------------------------------
-- Author: htl258(Tony)
-- Date : 2009-07-24 18:24:21
---------------------------------
--> 生成测试数据表:tb
If not object_id('[tb]') is null
Drop table [tb]
Go
Create table [tb]([用户号] int,[用户名称] nvarchar(11),[污水费计费度] decimal(18,2),[计费月份] Datetime,[水费金额] decimal(18,2))
Insert tb
Select 000001,'AAAAAAAAAAA',1.00,'2009-01-01',120.00 union all
Select 000002,'BBBBBBBBBBB',1.11,'2009-01-01',122.00 union all
Select 000003,'CCCCCCCCCCC',4.00,'2009-01-01',812.00 union all
Select 000004,'DDDDDDDDDDD',6.45,'2009-01-01',822.00 union all
Select 000001,'AAAAAAAAAAA',1.10,'2009-02-01',20.00 union all
Select 000002,'BBBBBBBBBBB',1.31,'2009-02-01',22.00 union all
Select 000003,'CCCCCCCCCCC',4.40,'2009-02-01',82.00 union all
Select 000004,'DDDDDDDDDDD',2.30,'2009-02-01',23.00 union all
Select 000001,'AAAAAAAAAAA',1.00,'2009-03-01',120.00 union all
Select 000002,'BBBBBBBBBBB',1.11,'2009-03-01',122.00 union all
Select 000003,'CCCCCCCCCCC',4.00,'2009-03-01',812.00 union all
Select 000004,'DDDDDDDDDDD',6.45,'2009-03-01',212.00 union all
Select 000001,'AAAAAAAAAAA',1.00,'2009-04-01',120.00 union all
Select 000002,'BBBBBBBBBBB',1.11,'2009-04-01',122.00 union all
Select 000003,'CCCCCCCCCCC',4.00,'2009-04-01',812.00 union all
Select 000004,'DDDDDDDDDDD',6.45,'2009-04-01',822.00 union all
Select 000001,'AAAAAAAAAAA',1.00,'2009-05-01',120.00 union all
Select 000002,'BBBBBBBBBBB',1.11,'2009-05-01',122.00 union all
Select 000003,'CCCCCCCCCCC',4.00,'2009-05-01',812.00 union all
Select 000004,'DDDDDDDDDDD',6.45,'2009-05-01',820.00 union all
Select 000004,'DDDDDDDDDDD',6.45,'2009-06-01',820.00 union all
Select 000001,'AAAAAAAAAAA',1.00,'2009-06-01',120.00
Go
--Select * from tb
-->SQL查询如下:
;with t as
(
select * from tb t
where exists(
select 1
from tb
where [用户号]=t.[用户号]
and 污水费计费度=t.污水费计费度
and abs(datediff(mm,[计费月份],t.[计费月份]))=1)
)
select *
from t a
where exists(
select 1
from t
where 用户号=a.用户号
group by 用户号
having count(1)>3)
order by 1
/*
用户号 用户名称 污水费计费度 计费月份 水费金额
----------- ----------- --------------------------------------- ----------------------- ---------------------------------------
1 AAAAAAAAAAA 1.00 2009-03-01 00:00:00.000 120.00
1 AAAAAAAAAAA 1.00 2009-04-01 00:00:00.000 120.00
1 AAAAAAAAAAA 1.00 2009-05-01 00:00:00.000 120.00
1 AAAAAAAAAAA 1.00 2009-06-01 00:00:00.000 120.00
4 DDDDDDDDDDD 6.45 2009-05-01 00:00:00.000 820.00
4 DDDDDDDDDDD 6.45 2009-06-01 00:00:00.000 820.00
4 DDDDDDDDDDD 6.45 2009-04-01 00:00:00.000 822.00
4 DDDDDDDDDDD 6.45 2009-03-01 00:00:00.000 212.00
(8 行受影响)
*/
SELECT *
FROM @TB AS T
WHERE EXISTS(SELECT 1 FROM @TB WHERE 用户号=T.用户号 AND 污水费计费度=T.污水费计费度 AND 计费月份 BETWEEN 计费月份 AND DATEADD(MONTH,2,T.计费月份) HAVING COUNT(*)>=3)
ORDER BY 用户号,污水费计费度,计费月份
select * from TableName where 用户名称+convert(varchar,污水费计费度)=(select 用户名称+convert(varchar,污水费计费度) from C_car
group by 用户名称+convert(varchar,污水费计费度) having count(*)>1)
and exists (select 1 from TableName a where (a.用户名称+a.污水费计费度)=(C_car.用户名称+C_car.污水费计费度) and abs(datediff(d,a.计费月份,C_Car.计费月份))=1)
and exists (select 1 from TableName a where (a.用户名称+a.污水费计费度)=(C_car.用户名称+C_car.污水费计费度) and abs(datediff(d,a.计费月份,C_Car.计费月份))=2)
order by 计费月份
select * from TableName where 用户名称+convert(varchar,污水费计费度)=(select 用户名称+convert(varchar,污水费计费度) from C_car
group by 用户名称+convert(varchar,污水费计费度) having count(*)>1)
and exists (select 1 from TableName a where (a.用户名称+a.污水费计费度)=(C_car.用户名称+C_car.污水费计费度) and (dateadd(d,-1,a.计费月份)=C_Car.计费月份 or dateadd(d,1,a.计费月份)=C_Car.计费月份))
order by 计费月份
--6楼的括号位置有点错误
----------------------------------------------------------------
-- Author :fredrickhu(小F 向高手学习)
-- Date :2009-07-24 16:08:18
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
create table [tb]([用户号] varchar(6),[用户名称] varchar(11),[污水费计费度] numeric(3,2),[计费月份] datetime,[水费金额] numeric(5,2))
insert [tb]
select '000001','AAAAAAAAAAA',1.00,'2009-01-01',120.00 union all
select '000002','BBBBBBBBBBB',1.11,'2009-01-01',122.00 union all
select '000003','CCCCCCCCCCC',4.00,'2009-01-01',812.00 union all
select '000004','DDDDDDDDDDD',6.45,'2009-01-01',822.00 union all
select '000001','AAAAAAAAAAA',1.10,'2009-02-01',20.00 union all
select '000002','BBBBBBBBBBB',1.31,'2009-02-01',22.00 union all
select '000003','CCCCCCCCCCC',4.40,'2009-02-01',82.00 union all
select '000004','DDDDDDDDDDD',2.30,'2009-02-01',23.00 union all
select '000001','AAAAAAAAAAA',1.00,'2009-03-01',120.00 union all
select '000002','BBBBBBBBBBB',1.11,'2009-03-01',122.00 union all
select '000003','CCCCCCCCCCC',4.00,'2009-03-01',812.00 union all
select '000004','DDDDDDDDDDD',6.45,'2009-03-01',212.00 union all
select '000001','AAAAAAAAAAA',1.00,'2009-04-01',120.00 union all
select '000002','BBBBBBBBBBB',1.11,'2009-04-01',122.00 union all
select '000003','CCCCCCCCCCC',4.00,'2009-04-01',812.00 union all
select '000004','DDDDDDDDDDD',6.45,'2009-04-01',822.00 union all
select '000001','AAAAAAAAAAA',1.00,'2009-05-01',120.00 union all
select '000002','BBBBBBBBBBB',1.11,'2009-05-01',122.00 union all
select '000003','CCCCCCCCCCC',4.00,'2009-05-01',812.00 union all
select '000004','DDDDDDDDDDD',6.45,'2009-05-01',820.00
--------------开始查询--------------------------
select
*
from
tb t
where
exists
(select * from tb where 用户号=t.用户号 and 污水费计费度=t.污水费计费度
and
abs(datediff(mm,计费月份,t.计费月份))=1)
order by
用户号,污水费计费度,计费月份
----------------结果----------------------------
/*用户号 用户名称 污水费计费度 计费月份 水费金额
------ ----------- ------ ------------------------------------------------------ -------
000001 AAAAAAAAAAA 1.00 2009-03-01 00:00:00.000 120.00
000001 AAAAAAAAAAA 1.00 2009-04-01 00:00:00.000 120.00
000001 AAAAAAAAAAA 1.00 2009-05-01 00:00:00.000 120.00
000002 BBBBBBBBBBB 1.11 2009-03-01 00:00:00.000 122.00
000002 BBBBBBBBBBB 1.11 2009-04-01 00:00:00.000 122.00
000002 BBBBBBBBBBB 1.11 2009-05-01 00:00:00.000 122.00
000003 CCCCCCCCCCC 4.00 2009-03-01 00:00:00.000 812.00
000003 CCCCCCCCCCC 4.00 2009-04-01 00:00:00.000 812.00
000003 CCCCCCCCCCC 4.00 2009-05-01 00:00:00.000 812.00
000004 DDDDDDDDDDD 6.45 2009-03-01 00:00:00.000 212.00
000004 DDDDDDDDDDD 6.45 2009-04-01 00:00:00.000 822.00
000004 DDDDDDDDDDD 6.45 2009-05-01 00:00:00.000 820.00
(所影响的行数为 12 行)
*/
select
*
from
tb t
where
exists
(select 1 from tb where 用户名称=t.用户名称 and 污水费计费度=t.污水费计费度)
and
abs(datediff(mm,计费月份,t.计费月份))=1
order by
用户号,用户名称
DECLARE @TB TABLE([用户号] VARCHAR(6), [用户名称] VARCHAR(11), [污水费计费度] DECIMAL(18,2), [计费月份] DATETIME, [水费金额] DECIMAL(18,2))
INSERT @TB
SELECT '000001', 'AAAAAAAAAAA', 1.00, '2009-01-01', 120.00 UNION ALL
SELECT '000002', 'BBBBBBBBBBB', 1.11, '2009-01-01', 122.00 UNION ALL
SELECT '000003', 'CCCCCCCCCCC', 4.00, '2009-01-01', 812.00 UNION ALL
SELECT '000004', 'DDDDDDDDDDD', 6.45, '2009-01-01', 822.00 UNION ALL
SELECT '000001', 'AAAAAAAAAAA', 1.10, '2009-02-01', 20.00 UNION ALL
SELECT '000002', 'BBBBBBBBBBB', 1.31, '2009-02-01', 22.00 UNION ALL
SELECT '000003', 'CCCCCCCCCCC', 4.40, '2009-02-01', 82.00 UNION ALL
SELECT '000004', 'DDDDDDDDDDD', 2.30, '2009-02-01', 23.00 UNION ALL
SELECT '000001', 'AAAAAAAAAAA', 1.00, '2009-03-01', 120.00 UNION ALL
SELECT '000002', 'BBBBBBBBBBB', 1.11, '2009-03-01', 122.00 UNION ALL
SELECT '000003', 'CCCCCCCCCCC', 4.00, '2009-03-01', 812.00 UNION ALL
SELECT '000004', 'DDDDDDDDDDD', 6.45, '2009-03-01', 212.00 UNION ALL
SELECT '000001', 'AAAAAAAAAAA', 1.00, '2009-04-01', 120.00 UNION ALL
SELECT '000002', 'BBBBBBBBBBB', 1.11, '2009-04-01', 122.00 UNION ALL
SELECT '000003', 'CCCCCCCCCCC', 4.00, '2009-04-01', 812.00 UNION ALL
SELECT '000004', 'DDDDDDDDDDD', 6.45, '2009-04-01', 822.00 UNION ALL
SELECT '000001', 'AAAAAAAAAAA', 1.00, '2009-05-01', 120.00 UNION ALL
SELECT '000002', 'BBBBBBBBBBB', 1.11, '2009-05-01', 122.00 UNION ALL
SELECT '000003', 'CCCCCCCCCCC', 4.00, '2009-05-01', 812.00 UNION ALL
SELECT '000004', 'DDDDDDDDDDD', 6.45, '2009-05-01', 820.00
SELECT *
FROM @TB AS T
WHERE EXISTS(SELECT * FROM @TB WHERE 用户号=T.用户号 AND 污水费计费度=T.污水费计费度 AND ABS(DATEDIFF(MONTH,计费月份,T.计费月份))=1)
ORDER BY 用户号,污水费计费度,计费月份
/*
用户号 用户名称 污水费计费度 计费月份 水费金额
------ ----------- -------------------- ------------------------------------------------------ --------------------
000001 AAAAAAAAAAA 1.00 2009-03-01 00:00:00.000 120.00
000001 AAAAAAAAAAA 1.00 2009-04-01 00:00:00.000 120.00
000001 AAAAAAAAAAA 1.00 2009-05-01 00:00:00.000 120.00
000002 BBBBBBBBBBB 1.11 2009-03-01 00:00:00.000 122.00
000002 BBBBBBBBBBB 1.11 2009-04-01 00:00:00.000 122.00
000002 BBBBBBBBBBB 1.11 2009-05-01 00:00:00.000 122.00
000003 CCCCCCCCCCC 4.00 2009-03-01 00:00:00.000 812.00
000003 CCCCCCCCCCC 4.00 2009-04-01 00:00:00.000 812.00
000003 CCCCCCCCCCC 4.00 2009-05-01 00:00:00.000 812.00
000004 DDDDDDDDDDD 6.45 2009-03-01 00:00:00.000 212.00
000004 DDDDDDDDDDD 6.45 2009-04-01 00:00:00.000 822.00
000004 DDDDDDDDDDD 6.45 2009-05-01 00:00:00.000 820.00
(12 row(s) affected)
*/
select * from t a where
not exists
(select 1 from t
where
id=a.id
and
abs(datediff(mm,date,a.date))=2
or
abs(datediff(mm,date,a.date))=1)