如:A表,B表 二个表结构大至类似,三个字段 A表:
id 标识
type 类别 {值:0,1,2,5,9.... 大约有10多个类别吧,数字没有规则的,但总的是可以知的}
username 姓名
adddate 添加时间
现在要求是 把A表的
类别type=0的最新10条添加到B表中,
类别type=1的最新10条添加到B表中,
类别type=2的最新10条添加到B表中,
类别type=5的最新10条添加到B表中,
.......当然用循环也能实现,但太麻烦了,能不能用一条SQL来实现这样的功能?
id 标识
type 类别 {值:0,1,2,5,9.... 大约有10多个类别吧,数字没有规则的,但总的是可以知的}
username 姓名
adddate 添加时间
现在要求是 把A表的
类别type=0的最新10条添加到B表中,
类别type=1的最新10条添加到B表中,
类别type=2的最新10条添加到B表中,
类别type=5的最新10条添加到B表中,
.......当然用循环也能实现,但太麻烦了,能不能用一条SQL来实现这样的功能?
解决方案 »
- 汇总查询,搞不出来。
- |zyciis| SQL2005和SQL2000有没有表映射功能,映射B数据库的的表User到A数据库中 谢谢 急
- 很奇怪的问题,同样的代码对数据库操作,第一次总是失几,第二次就好了,为什么
- 寻求一Sql语句写法,在线等!
- 如何壓縮數據庫空間!很急!!!請高手幫忙!!
- 求教高手,一个数据同步产生的问题
- 请问如何得到一条语句的执行结果,这条语句是动态生成的
- 初学数据库者请各位前辈指教,谢谢!
- WIN98,WIN2000, 更改机器名,SQL7.0 报错
- 说服老板免费送100M邮箱给所有网民,散分
- sql server 触发器
- sql 求助,一定要弄清楚这个问题。。每次这里卡死。。
with cte as(
select *, row_number() over(partition by [type] order by adddate desc) rid from 你的表A
)
Insert Into 你的表B(type,username)
select [type],[username] from cte where rid<=10
sql2000 只能写存储过程了。
試試以下:
insert 表B (type,username)
select type,username
from 表A a
where a.id IN (select top 10 * from 表A b where b.id = a.id order by adddate desc)
order by id,adddate desc
--上面第5行更正如下:
where a.id IN (select top 10 id from 表A b where b.id = a.id order by adddate desc)
insert into B表
select a.*
from A表 a
where checksum(*) in (select top 10 checksum(*) from A表 b where a.type=b.type order by adddate desc)
你试试这个行不行:
select ID,
TYPE,
username,
adddate
from
(
select ID,
TYPE,
username,
adddate,
(select COUNT(*)
from A a2
where a1.type = a2.type
and a1.adddate <= a2.adddate
) as rownum
from A a1
)t
where rownum <= 10
FROM A AS T1
WHERE A.ID IN ( SELECT TOP 10 ID FROM A AS T2 WHERE T1.TYPE = T2.TYPE ORDER BY ADDDATE DESC )
FROM A AS T1
WHERE T1.ID IN ( SELECT TOP 10 ID FROM A AS T2 WHERE T1.TYPE = T2.TYPE ORDER BY ADDDATE DESC )