ELECT top 6 hotel_Around,city,city_name,around_id,COUNT(*) AS Expr1 FROM Searcharound_v_top WHERe (DATEDIFF(dd, inputdate, GETDATE()) < 8) AND (DATEDIFF(dd, inputdate, GETDATE())> 0) GROUP BY hotel_Around,city,city_name,around_id ORDER BY COUNT(*) DESC
视图:Searcharound_v_top
id city_name Around inputdate around_id city
100000 866 东钱湖 2009-7-22 11:00:00 107062 宁波
100005 746 滨江公园 2009-7-22 11:02:00 106030 惠州
100015 755 景点景观 2009-7-22 11:04:00 139104 深圳
100019 744 广东药学院附属第一医院 2009-7-22 11:04:00 113039 广州
求一周内,查询最多的关键字~~优化求解!!!!
一周查询数量50000左右,要用group by 来匹配是相当慢的~
能用什么办法求到答案呢?
不要用datediff函数,会对每一行的日期进行函数运算再去比较,在数据多的情况下会很慢。
用 inputdate between dateadd(dd,-7,getdate()) and dateadd(dd,-1,getdate()) 相信对你的速度会有提高
select * from Searcharound_v_top where Around in
(select top 6 Around from Searcharound_v_top
where datediff(ww, inputdate, getdate())=0
order by count(Around) desc)
先查出一周内的最多的6个关键字,在查出相关信息
不知道是否符合你的要求
SELECt top 6 hotel_Around,city,city_name,around_id,COUNT(*) AS Expr1
FROM Searcharound_v_top
WHERe convert(varchar(10),inputdate,21) between convert(varchar(10),getdate(),21) and convert(varchar(10),dateadd(dd,-7,getdate()),21)
GROUP BY hotel_Around,city,city_name,around_id
ORDER BY COUNT(*) DESC
呵呵 思路一样、写法不一样而已
除了先把一个星期的数据过滤、再统计外、想不到其它什么好方法了
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息