读书人

一个比较棘手的有关问题快来帮忙()

发布时间: 2012-03-30 17:32:09 作者: rapoo

一个比较棘手的问题,快来帮忙(在线等)
有这么一个表:
id name content date
---------------------------------
1 zhang abc 2007-01-05
2 yang ab 2007-01-12
3 zhang abc 2007-01-25
4 zhang abc 2007-02-01
5 zhang abc 2007-02-21
6 yang ac 2007-03-01
7 hu abc 2007-04-01
。。。
现在要做统计,(id是递增1的)
每个人每个月最新的内容,如果为abc的返回1,如果不是abc返回0

结果应该返回如下格式:
name contentIsABC date
---------------------------
zhang 1 2007-01-25 ---> 1月份中间最后的内容
zhang 1 2007-02-21 ---> 2月份最后的一次内容也是abc
yang 0 2007-01-12
yang 0 2007-03-01
hu 1 2007-04-01

发了100分,希望高手愿意帮忙,很紧急,我死都想不出来。在线等,,,拜托了



[解决办法]
SELECT
name,
contentIsABC = case content when 'abc ' then 1 else 0 end,
date
FROM 表 A
WHERE NOT EXISTS(
SELECT * FROM 表
WHRE name = A.name
AND datediff(month, date, A.date) = 0
AND id > A.id)

[解决办法]
declare @tab table(id int,name varchar(10),content varchar(10),date datetime)

insert into @tab select 1, 'zhang ', 'abc ', '2007-01-05 '
insert into @tab select 2, 'yang ', 'ab ', '2007-01-12 '
insert into @tab select 3, 'zhang ', 'abc ', '2007-01-25 '
insert into @tab select 4, 'zhang ', 'abc ', '2007-02-01 '
insert into @tab select 5, 'zhang ', 'abc ', '2007-02-21 '
insert into @tab select 6, 'yang ', 'ac ', '2007-03-01 '
insert into @tab select 7, 'hu ', 'abc ', '2007-04-01 '

select
t.name,(case t.content when 'abc ' then 1 else 0 end) as contentIsABC,t.date
from
@tab t
where


not exists(select 1 from @tab where name=t.name and datediff(mm,t.date,date)=0 and date> t.date)
order by
t.name desc,t.date

/*
name contentIsABC date
---------- ------------ ------------------------------------------------------
zhang 1 2007-01-25 00:00:00.000
zhang 1 2007-02-21 00:00:00.000
yang 0 2007-01-12 00:00:00.000
yang 0 2007-03-01 00:00:00.000
hu 1 2007-04-01 00:00:00.000
*/
[解决办法]
select *,case when content= 'abc ' then 1 else o end contentIsABC from table
where (select count(*) from table where name = t.name and datename(mm,date)+ datename(yy,date)=datename(mm,t.date)+ datename(yy,t.date) and date> t.date) <1


[解决办法]
SELECT name,contentIsABC = case content when 'abc ' then 1 else 0 end,date
FROM tbl A
WHERE NOT EXISTS( SELECT * FROM tbl WHRE name = A.name
AND convert(varchar(7),date,120) =convert(varchar(7),a.date,120) AND a.id < id)
[解决办法]
--如果date是字符型
Create Table 表
(idInt,
nameVarchar(10),
contentVarchar(10),
[date]Varchar(10))
Insert 表 Select 1, 'zhang ', 'abc ', '2007-01-05 '
Union All Select 2, 'yang ', 'ab ', '2007-01-12 '
Union All Select 3, 'zhang ', 'abc ', '2007-01-25 '
Union All Select 4, 'zhang ', 'abc ', '2007-02-01 '
Union All Select 5, 'zhang ', 'abc ', '2007-02-21 '
Union All Select 6, 'yang ', 'ac ', '2007-03-01 '
Union All Select 7, 'hu ', 'abc ', '2007-04-01 '
GO
Select
name,
(Case content When 'abc ' Then 1 Else 0 End) As contentIsABC,
[date]
From 表 A
Where Not Exists(Select 1 From 表 Where name = A.name And Left([date], 7) = Left(A.[date], 7) And [date] > A.[date])
Order By name Desc, [date]
GO
Drop Table 表
--Result
/*
zhang12007-01-25
zhang12007-02-21
yang02007-01-12
yang02007-03-01
hu12007-04-01
*/

读书人网 >SQL Server

热点推荐