第一个查询:用户表     
myuser
(
int:uid             //自动增长
varchar:uname       //用户名
)销售记录表 
mysell
(
int:sid             //自动增长
int:uid             //用户ID,即购买者
datetime:addtime    //购物时间
)
要求查询:出过去6个月中,在单月中购物超过三次的用户,最好能如下显示:
uname/购物超出三次的月份/次数/---------------------------------------------------------------
---------------------------------------------------------------第二个查询:用户表     
myuser
(
int:uid             //自动增长
varchar:uname       //用户名
)产品表:
myproduct
(
int:pid             //自动增长
varchar:pname       //产品名
)销售记录表 
mysell
(
int:sid             //自动增长
int:uid             //用户ID,即购买者
int:pid             //产品ID
int:amount          //购物量
datetime:addtime    //购物时间
)
要求查询:在过去三个月内,购买同一个产品超过三件的顾客,最好能如下显示:
uname/pname/购物量/

解决方案 »

  1.   

    select uname,count(*) as counter,date_format("%m",addtime) as month from mysell,myuser where addtime>=date_sub(now(),interval 6 month) and mysell.uid=myuser.uid group by month,uid having counter>3;
    第一个,没有测试过,大致模样就是这样子的。
      

  2.   

    select uname,pname,sum(amount) as total_amount from mysell,myuser,myproduct
     where addtime>=date_sub(now(),interval 3 month) and mysell.uid=myuser.uid and mysell.pid=myproduct.pid group by mysell.uid,mysell.pid having total_amount>3;
    不知道你所说的三个月前是严格的90天以前,还是加上本月的前两个月——未满一月算一月。
      

  3.   

    select uname,count(*) as counter,date_format("%m",addtime) as month from mysell,myuser
     where addtime>=date_sub(now(),interval 6 month) and mysell.uid=myuser.uid group by month,mysell.uid having counter>3;
    第一例修正如上。
      

  4.   

    很好   谢谢 wildlily980我回头慢慢试
      

  5.   

    SELECT u.uname,
    p.pname,
    SUM(amount)
    FROM mysell s
    INNER JOIN myuser u
    ON s.uid = u.uid
    INNER JOIN myproduct p
    ON s.pid = p.pid
    WHERE DATEADD("Month",3,s.addtime)>=GETDATE()
    GROUP BY u.uname,p.pname
    HAVING SUM(amount)>3