子查询太多了。。
不清楚业务。有点难改噢```
楼主可以尝试把业务说出来,让大家帮忙写SQL。这样应该会好点。。

解决方案 »

  1.   

    建议楼主看看这些优化的介绍
    http://blog.csdn.net/hansbj/archive/2005/01/13/251384.aspxhttp://blog.csdn.net/foxflyhigher/archive/2008/03/05/2148428.aspx
    http://blog.csdn.net/SafeF8/archive/2005/01/16/255183.aspx
    http://blog.csdn.net/ponydph/archive/2008/03/08/2158633.aspx
      

  2.   


    --try
    select b.title, b.guojia, b.jiage, b.huobi, b.u_user,
           d.num,d.junjia, d.dijia 
    FROM ebay b 
    left join (SELECT title, guojia, huobi, u_user,COUNT(id) as num, AVG(jiage) as junjia,MIN(jiage)as dijia FROM ebay group by title, guojia, huobi, u_user ) d
             on d.title =b.title and  d.guojia=b.guojia and  d.huobi=b.huobi  and d.u_user = b.u_user
    where not exists(
                  SELECT 1 FROM ebay where title =b.title and  guojia=b.guojia and  huobi=b.huobi  and u_user = b.u_user and id <b.id)
                   ) AND b.riqi >= DateAdd(m, -3, (select u_ltime from ebay_user c where c.u_user=b.u_user)) 
    ORDER BY d.num DESC,b.title,b.junjia,b.dijia--注意一下这句的大于号或者小于号,自己根据实际情况修改一下:
    not exists(
                  SELECT 1 FROM ebay where title =b.title and  guojia=b.guojia and  huobi=b.huobi  and u_user = b.u_user and id <b.id)-->OR
    not exists(
                  SELECT 1 FROM ebay where title =b.title and  guojia=b.guojia and  huobi=b.huobi  and u_user = b.u_user and id >b.id)
      

  3.   


    表ebay 字段id,title, guojia, huobi, bian, jiage, riqi, u_user (id,标题,国家,货币单位,编号,价格,日期,对象用户)表ebay_user 字段id, u_user, u_ftime, u_ltime, u_class (id,对象用户,首次采集日期,末次采集日期,用户分类ID)表ebay_user_class 字段id, ebay_class (id,用户分类)平时通过复制分析采集ebay网上的数据,采集相应用户的销售信息,每条信息在表ebay存储为1条,程序自动判断采集用户数据入库ebay_user,这些都没问题用来筛选数据的时候问题就出现了,,,共有10多万条数据,需要筛选出所有标题出现的次数、国别、货币单位、均价、低价、用户,数据为相应用户末次采集时间的前3个月,因可能出现不同用户使用同一个标题,或同一个用户在不同ebay兜售产品的货币单位等不同,估采用了group by 标题 国家 货币单位 用户研究了老半天,,,查询的效率还是很低,去除条件"末次采集时间的前3个月",则要3秒上下 
      

  4.   


    直接用SQL查询分析器查询得到的数据量为不到8000条,速度29秒
      

  5.   


    -- 拆为两句,
    SELECT  b.id, b.title,  b.guojia,  b.jiage,  b.huobi,  b.u_user,count(b.id) as num,avg(b.jiage) as junjia,min(b.jiage) as dijia
    into #temp from ebay b
    where b.riqi >= DateAdd(m, -3, (select u_ltime from ebay_user c where c.u_user=b.u_user))
    group by b.id, b.title,  b.guojia,  b.jiage,  b.huobi,  b.u_userselect * from #temp t 
    where not exists(select 1 from #temp where title = t.title AND guojia = t.guojia AND huobi = t.huobi AND u_user=t.u_user)
      

  6.   

    SELECT  b.id, b.title,  b.guojia,  b.jiage,  b.huobi,  b.u_user,count(b.id) as num,avg(b.jiage) as junjia,min(b.jiage) as dijia
    into #temp from ebay b
    where b.riqi >= DateAdd(m, -3, (select u_ltime from ebay_user c where c.u_user=b.u_user))select * from #temp t 
    where not exists(select 1 from #temp where title = t.title AND guojia = t.guojia AND huobi = t.huobi AND u_user=t.u_user and id <t.id) -- 笔误,少些了id这个条件
      

  7.   


    改了下SELECT a.title, a.guojia, a.huobi, a.u_user, COUNT(id) AS num, AVG(jiage) AS junjia, MIN(jiage) AS dijia FROM ebay a where a.riqi >= DateAdd(m, -3, (select c.u_ltime from ebay_user c where c.u_user=a.u_user)) GROUP BY a.title, a.guojia, a.huobi, a.u_user order by num DESC,a.title,junjia,dijia貌似这样就是我想要的,,,HOHO,,,再测试看看