问题在于返回的这五条记录不是按照T来排序的??SELECT * FROM (SELECT TOP 5 A,B FROM T1 WHERE C=1 ORDER BY T DESC UNION SELECT TOP 5 A,B FROM T1 WHERE C = 0 ORDER BY T DESC) DERIVEDTBL ORDER BY C DESC,T DESC
??

解决方案 »

  1.   

    T表示时间比如今天我添加了10条记录且都满足C =0 的条件那么按照那个语句 ORDER BY T DESC 应该是按照时间倒序排列吧,所以应该最新的记录会被显示但是事实不是这样的TOP 5 显示的并不是按照T倒序排列的
      

  2.   

    select * from T1 a where 5>(select count(1) from t1 b where b.c= a.c and b.t > a.t group by C)
    order by C DESC,T DESC
      

  3.   

    谢谢你tntzbzc(华裔大魔王—抗日要从娃娃抓起) 但是我只是想问个为什么,解决办法我也知道的
      

  4.   

    因为你最后没有按照T排序最好不要用 SELECT TOP ... ORDER BY...., 这种写法效率不高
      

  5.   

    跟最后没关系,我测试过,最后用了T排序,结果是一样的关键问题不在最后的排序而在union得到的结果本身没有按照我的排序要求来我们现在不考虑,我只是想知道为什么因为搞的我挺郁闷
      

  6.   

    declare @tb table (C INT,T DATETIME DEFAULT GETDATE())
    DECLARE @I INT
    SELECT @I = 1INSERT INTO @TB (C,T) SELECT RAND(CHECKSUM(NEWID()))*10,CAST( RAND(CHECKSUM(NEWID()))*10000 AS DATETIME)FROM MASTER..SYSOBJECTS SELECT C,MAX(T) MAX,MIN(T) MIN FROM @TB WHERE C IN (0,1) GROUP BY C/**********************
    语句1  原始语句  结果错误
    **********************/
    SELECT '' '语句1',* FROM (
    SELECT TOP 5 C,T FROM @TB WHERE C=0 ORDER BY T DESC 
    UNION 
    SELECT TOP 5 C,T FROM @TB WHERE C=1 ORDER BY T DESC
    ) TB ORDER BY C ,T DESC/**********************
    语句2  改进后的语句1 结果正确**********************/
    SELECT '' '语句2',* FROM(
    SELECT * FROM(
    SELECT TOP 5 C,T FROM @TB WHERE C=0 ORDER BY T DESC )T1
    UNION ALL
    SELECT * FROM(
    SELECT TOP 5 C,T FROM @TB WHERE C=1 ORDER BY T DESC )T1
    )TB ORDER BY C ,T DESC/**********************
    语句3  我给你的语句   结果正确   我做了点修改
    **********************/
    select '' '语句3',* from @TB a where 5>ISNULL((select count(1) from @TB b where b.c= a.c and b.t > a.t group by C),0)
    AND C IN (0,1)
    order by C ,T DESC
    /*****************************************
    在查询分析器中打开“显示执行计划”并执行该脚本。
    然后查看执行计划,你会发现语句1和语句2最大的区别是---
    语句1只是在外部作了一次ORDER BY,并没有在内部执行ORDER BY 操作。
    所以结果差强人意。看了就知道为什么了
    ******************************************/
      

  7.   

    非常感谢你详细的测试问题又来了一个我把两个的条件调个位置竟然就是我想要的结果了,是巧合还是什么?SELECT * FROM (SELECT TOP 5 A,B FROM T1 WHERE C=1 ORDER BY T DESC UNION SELECT TOP 5 A,B FROM T1 WHERE C = 0 ORDER BY T DESC) DERIVEDTBL ORDER BY C DESC我刚才假定的是 满足c=1没有记录,满足 c = 0有记录,拿不到我想要的结果但是如果满足c = 1 有记录,而满足c = 0 没有记录,拿到的结果竟然就是按照我的排序来的越搞我越糊涂了UNION 到底是咋回事啊,晕了
      

  8.   

    SELECT TOP 5 A,B FROM T1 WHERE C=1 ORDER BY T DESC UNION SELECT TOP 5 A,B FROM T1 WHERE C = 0 ORDER BY T DESC
    这本身就是个病句,不会执行的吧