首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

适才的帖子SQL实例给错了,再开一贴

2013-09-04 
刚才的帖子SQL实例给错了,再开一贴create table testA(id int,fdate datetime)create table testB(id int,

刚才的帖子SQL实例给错了,再开一贴


create table testA(id int,fdate datetime)
create table testB(id int,fid varchar(10),fremark varchar(10))

insert into testA values(1,'2013-08-01');
insert into testA values(2,'2013-08-03');
insert into testA values(3,'2013-08-07');
insert into testA values(4,'2013-08-06');

insert into testB values(1,'A1','')
insert into testB values(1,'B1','')

insert into testB values(2,'A1','')
insert into testB values(2,'B1','')

insert into testB values(3,'B1','')

insert into testB values(4,'A1','')
insert into testB values(4,'B1','')


result

3,'2013-08-07','B1'
4,'2013-08-06','A1'

[解决办法]
select a.*,b.fid into testc from testa a inner join testb b on a.id=b.id
select * from testc c where (select count(*) from testc where fid=c.fid and fdate>c.fdate)=0
[解决办法]
;WITH cte AS
(
SELECT b.*,a.fdate
FROM testA a
INNER JOIN testB b
ON a.id = b.id
)
SELECT b.id,fdate=CONVERT(CHAR(10), b.fdate,120),b.fid FROM 
(SELECT DISTINCT fid FROM testB) a
CROSS APPLY
(SELECT TOP(1) * FROM cte m WHERE m.fid=a.fid ORDER BY m.fdate DESC) b
/*
idfdatefid
42013-08-06A1
32013-08-07B1
*/

[解决办法]
;WITH cte AS
(
SELECT b.*,a.fdate
FROM testA a
INNER JOIN testB b
ON a.id = b.id
)
SELECT * FROM cte a
WHERE NOT EXISTS
(
SELECT 1
FROM cte b
WHERE b.fid = a.fid
AND b.fdate > a.fdate


)
/*
idfidfremarkfdate
4A12013-08-06 00:00:00.000
3B12013-08-07 00:00:00.000
*/

热点排行