百万级网站排名对比应该怎么写比较好

郁闷龙 2015-08-14 01:07:40
要做个排名100万内的网站每天排名对比.
比如把2天的数据放到1个表里,3个字段,id(默认自增整数),网站名=domain,当天排名=num
id 1-100000万为第1天的数据,1000000-200000万为第2天的数据.
需要查询所有排名第2天上升了10万名的网站
对于第1天未出现的网站我写出来了
'select * from blog_Dn1 where domain in (select domain from blog_Dn1 group by domain having count(domain)= 1) and id>1000000 and num<900000'
然后2天都有排名并在第2天上升10万名排名的没思路,主要数据太大,需要只执行较少sql,求教下,非常感谢.
...全文
44 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
郁闷龙 2015-08-14
3楼的想法很适合我,比较节约硬盘,然后计算速度也比较快.
回复
Cherise_huang 2015-08-14
我有一个想法: 1、首先筛选出第一天第二天都出现的网站名 2、将第一天出现的网站信息封装在临时表1中,按照网站名排序 将第二天出现的网站信息封装在临时表2中,按照网站名排序规则同上 3、用select查询这两张临时表,将这两张临时表封装成一张表 id1 domain1 num1 id2 domain2 num2 作为新表的列名 然后用num2-num1查出差大于10万的数据,即网站名
回复
select *
from blog_Dn1 t1
inner join  blog_Dn1 t2
        on t1.domain = t2.domain
where t1.id between 1 and 1000000 and
      t2.id between 1000001 and 2000000 and
	  t2.num +100000 = t1.num
回复
Haytor 2015-08-14
可以参考一下这个脚本,另外建议你增加一个字段用于记录是哪一天的数据,这样会更合理一些,就不用去计算是那一天的数据了。

DECLARE @Day1 INT
DECLARE @Day2 INT
DECLARE @DayNums INT
SET @DayNums = 1000000
SET @Day1 = 1
SET @Day2 = 2

SELECT 
	b.domain,a.num AS [上次名次],b.num AS [今天名次],(a.num - b.num) AS [提升名次]
FROM 
	blog_Dn1 a INNER JOIN blog_Dn1 b ON b.domain = a.domain
WHERE 
	a.id BETWEEN @DayNums*(@Day1-1) + 1 AND @DayNums*@Day1 AND
    b.id BETWEEN @DayNums*(@Day2-1) + 1 AND @DayNums*@Day2 AND 
	(a.num - b.num) > 100000
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2015-08-14 01:07
社区公告
暂无公告