declare @CompanyDate datetime  ;
set @CompanyDate = '2012-04-08'  ;
select GroupCode, ProductCode, ProjectCode, ProjectStartTime, ProjectEndTime, CreateTime, Id
from MarketingCaseExpire_Bak  where 
datediff(mm,CreateTime,@CompanyDate)=1 and
exists
(
select * from MarketingCaseExpire_Bak b where GroupCode=b.GroupCode and ProductCode = b.ProductCode 
and ProjectCode=b.ProjectCode
and convert(nvarchar(10),ProjectStartTime,120)= convert(nvarchar(10),b.ProjectStartTime,120)
and convert(nvarchar(10),ProjectEndTime,120)= convert(nvarchar(10),b.ProjectEndTime,120)
and convert(nvarchar(7),b.CreateTime,120)=convert(nvarchar(7),@CompanyDate,120)
and id<>b.id
)目的是
GroupCode, ProductCode, ProjectCode, ProjectStartTime, ProjectEndTime
这个月与上一个月的数据,如果上面5个字段都一样,则将上一月的数据查询出来。
下面是有数据的:
2000101214 30189038736 20091001125166 2012-01-01 00:00:00.000 2012-05-01 00:00:00.000 2012-03-01 00:00:00.000 b0d590e1-c683-40c5-8bb8-2dd5f41af99c
2000101214 30189038736 20091001125166 2012-01-01 00:00:00.000 2012-05-01 00:00:00.000 2012-04-01 00:00:00.000 d920876b-8e1c-4907-8152-aa1de3786a0c

解决方案 »

  1.   

    try:
    declare @CompanyDate datetime  ;
    set @CompanyDate = '2012-04-08'  ;
    select GroupCode, ProductCode, ProjectCode, ProjectStartTime, ProjectEndTime, CreateTime, Id
    from MarketingCaseExpire_Bak b where 
    datediff(mm,CreateTime,@CompanyDate)=1 and
    exists
    (
        select * from MarketingCaseExpire_Bak where GroupCode=b.GroupCode and ProductCode = b.ProductCode 
        and ProjectCode=b.ProjectCode
        and convert(nvarchar(10),ProjectStartTime,120)= convert(nvarchar(10),b.ProjectStartTime,120)
        and convert(nvarchar(10),ProjectEndTime,120)= convert(nvarchar(10),b.ProjectEndTime,120)
        and convert(nvarchar(7),b.CreateTime,120)=convert(nvarchar(7),@CompanyDate,120)
        and id<>b.id
    )
      

  2.   

      and id<>b.idb从何而来?
      

  3.   

    我子查询有别名啊。。
    and id<>b.idb从何而来?
      

  4.   


    declare @CompanyDate datetime  ;
    set @CompanyDate = '2012-04-08'  ;
    select GroupCode, ProductCode, ProjectCode, ProjectStartTime, ProjectEndTime, CreateTime, Id
    from MarketingCaseExpire_Bak a where 
    datediff(mm,CreateTime,@CompanyDate)=1 and
    exists
    (
    select * from MarketingCaseExpire_Bak b where a.GroupCode=b.GroupCode and a.ProductCode = b.ProductCode 
    and a.ProjectCode=b.ProjectCode
    and convert(nvarchar(10),a.ProjectStartTime,120)= convert(nvarchar(10),b.ProjectStartTime,120)
    and convert(nvarchar(10),a.ProjectEndTime,120)= convert(nvarchar(10),b.ProjectEndTime,120)
    and convert(nvarchar(7),b.CreateTime,120)=convert(nvarchar(7),@CompanyDate,120)
    and a.id<>b.id
    )
    都指定了别名就可以
      

  5.   

    代码改成这样试试:declare @CompanyDate datetime  ;
    set @CompanyDate = '2012-04-08'  ;
    select a.GroupCode, a.ProductCode, a.ProjectCode, a.ProjectStartTime, a.ProjectEndTime, a.CreateTime, a.Id
    from MarketingCaseExpire_Bak a inner join MarketingCaseExpire_Bak b on a.GroupCode=b.GroupCode 
    and a.ProductCode = b.ProductCode 
    and a.ProjectCode=b.ProjectCode
    and convert(nvarchar(10),a.ProjectStartTime,120)= convert(nvarchar(10),b.ProjectStartTime,120)
    and convert(nvarchar(10),a.ProjectEndTime,120)= convert(nvarchar(10),b.ProjectEndTime,120)
    and convert(nvarchar(7),b.CreateTime,120)=convert(nvarchar(7),@CompanyDate,120)
    and a.id<>b.id
    where datediff(mm,CreateTime,@CompanyDate)=1