SELECT DISTINCT top 9 userID FROM table
可以搜前9條,但我無法以adddate排序,一用adddate排序就出錯
怎么解決?

解决方案 »

  1.   

    SELECT DISTINCT top 9 userID FROM table order by adddate
      

  2.   

    select top 9 * from 表 a
    where not exists(
        select 1 from 表 where userID=a.userID and adddate<>a.adddate)
    order by adddate desc
      

  3.   

    你这个问题一定会有的了,因为你你ORDER BY adddate 的前九条记录有重复的,但你还DISTINCT TOP 9那么这两个条件都有冲突了。
      

  4.   

    SELECT DISTINCT top 9 userID,adddate FROM table order by adddate
    不好意思,各位,刚才搞错了,
      

  5.   

    to linfengit(林峰IT) 
    這樣不行啊,重復的記錄都出來了,
    ----------------
    to zjcxc(邹建) 
    這樣也不行啊,userID重復的記錄都不出來了,
    如userID為:
    8
    8
    1
    3
    3
    5
    就只搜出1和5,而我是要8,1,3,5這樣的記錄啊
      

  6.   

    我想搜出userID不重復的前9條記錄,并且這9條記錄是以adddate字段DESC排序的
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~这可是你说的,只要不重复的
      

  7.   

    --取userID不重复的select userID,adddate
          from 表 a
          where exists(
                       select 1 from(
                              select top 1 userID,adddate
                              from 表
                              where userID=a.userID
                              order by abs(datediff(second,adddate ,getdate())) desc 
                       )aa where userID=a.userID and adddate<>a.adddate)
      

  8.   

    select top 9 * from 表 a
    where not exists(
        select 1 from 表 where userID=a.userID and adddate<>a.adddate)
    order by adddate desc如果是mysql用
    select distinct * from table1 order by adddate desc limit 9
      

  9.   

    --如果重复的也出来select userid,adddate=max(adddate)
    from tb group by userid 
    order max(adddate) desc
      

  10.   

    --上面少写了top 
    select top 9 userid,adddate=max(adddate)
    from tb group by userid 
    order max(adddate) desc
    --如果还要包含其他字段:
    select a.* 
    from tb a,(
      select top 9 userid,adddate=max(adddate)
      from tb group by userid 
      order max(adddate) desc
    )b where a.userid=b.userid and a.adddate=b.adddate
      

  11.   

    select top 2 * from 表
    where adddate in  (
    select adddate
          from 表 a
          where exists(
                       select 1 from(
                              select top 1 userID,adddate
                              from 表
                              where userID=a.userID
                              order by abs(datediff(second,adddate ,getdate())) desc 
                       )aa where userID=a.userID and adddate<>a.adddate))
      

  12.   

    --测试
    create table tb(userID varchar(10),adddate datetime,strl varchar(10))
    insert tb values('zhangzs','2004-08-12','1')
    insert tb values('zhangzs','2004-08-13','q')
    insert tb values('hongyl','2004-08-14','w')
    insert tb values('hongyl','2004-08-15','w')
    insert tb values('guoy','2004-08-16','qw')
    insert tb values('guoy','2004-08-17','qwe')
    select top 2 * from tb 
    where adddate in  (
    select adddate
          from tb a
          where exists(
                       select 1 from(
                              select top 1 userID,adddate
                              from tb
                              where userID=a.userID
                              order by abs(datediff(second,adddate ,getdate())) desc 
                       )aa where userID=a.userID and adddate<>a.adddate))
    drop table tb---运行结果userID     adddate                                                strl       
    ---------- ------------------------------------------------------ ---------- 
    zhangzs    2004-08-13 00:00:00.000                                q
    hongyl     2004-08-14 00:00:00.000                                w
    --注意:把top 2 该成top 9 就可以了,试试。包括其他字段
      

  13.   

    to : zhangzs8896(小二) 
    不行啊,沒重復的都不出來了,如只出了8和3再測試別的朋友的看看
      

  14.   

    理解错了
    select a.* 
    from 表 a,(
      select top 9 userid,adddate=max(adddate)
      from 表 group by userid 
      order by max(adddate) desc
    )b where a.userid=b.userid and a.adddate=b.adddate
      

  15.   

    create table tb(userID varchar(10),adddate datetime,strl varchar(10))
    insert tb values('zhangzs','2004-08-12','1')
    insert tb values('zhangzs','2004-08-13','q')
    insert tb values('hongyl','2004-08-14','w')
    insert tb values('hongyl','2004-08-15','w')
    insert tb values('guoy','2004-08-16','qw')
    insert tb values('guoy','2004-08-17','qwe')
    insert tb values('aa','2004-08-17','qwe')select a.* 
    from tb a,(
      select top 9 userid,adddate=max(adddate)
      from tb group by userid 
      order by max(adddate) desc
    )b where a.userid=b.userid and a.adddate=b.adddatedrop table tb--userID     adddate                                                strl       
    ---------- ------------------------------------------------------ ---------- 
    zhangzs    2004-08-13 00:00:00.000                                q
    hongyl     2004-08-15 00:00:00.000                                w
    guoy       2004-08-17 00:00:00.000                                qwe
    aa         2004-08-17 00:00:00.000                                qwe
      

  16.   

    zjcxc(邹建) 的
    select userid,adddate=max(adddate)
    from tb group by userid 
    order max(adddate) desc
    成功通過測試,
    非常謝謝
    再測試一下別人的看看
      

  17.   

    zhangzs8896(小二) 的也行,謝謝,
    學了不少東西,以前在別的論壇也問過這問題沒解決,在這一下就解決了
      

  18.   

    原来order少了个by,呵呵,邹老大疏忽了。
      

  19.   

    userID不重復的前9條記錄!
    多种理解!
    是不是就相当于:每个人的最后登录时间?
    zjcxc(邹建) 就是这意思!
    BILLSJONE (BILL_JONE) 你是不是这意思?
      

  20.   

    我想搜出userID不重復的前9條記錄,并且這9條記錄是以adddate字段DESC排序的,是不是?