求一个sql语句:
数据库里有一个字段flag,还有一个datetime型字段
我要检索所有flag=1的数据放到最顶,然后还要datetime(注意:他的flag不等于1)最新的数据(要注意:就是BBS的最新帖子功能,但是置顶帖子放最上面),只要前40条  比如说flag=1的有10条,那么还有30条是FLAG=0的 但是flag=0的必须是最新的,而且时间要注意会有交叉

解决方案 »

  1.   

    比如:
    表A
    datetime    flag
    2006-10-1    0
    2006-10-2    1
    2006-10-3    0
    2006-10-4    1
    2006-10-5    1
    ...
    2006-12-30   0
    要求选择出所有的flag=1的数据,如果不到40条,则用时间(datetime)最新的补充足够40条
    选择出来的应该是这样
    2006-10-2    1
    2006-10-4    1
    2006-10-5    1 
    2006-12-30   0
      

  2.   

    我理解的是你这个意识,不知道理解的正确不,我表中值是这样的
    2006-11-01 00:00:00.000 0
    2006-11-01 00:00:00.000 1
    2006-11-01 00:00:00.000 0
    2006-11-01 00:00:00.000 0
    2006-11-02 00:00:00.000 1
    2006-11-02 00:00:00.000 0
    2006-11-03 00:00:00.000 0
    2006-11-03 00:00:00.000 0
    2006-11-04 00:00:00.000 1
    2006-11-05 00:00:00.000 0
    2006-11-06 00:00:00.000 1
    2006-11-07 00:00:00.000 1
    2006-11-07 00:00:00.000 0
    2006-11-07 00:00:00.000 1
    2006-11-08 00:00:00.000 0
    2006-11-08 00:00:00.000 1通过select * from table1 order by flag desc ,[datetime] desc 查询出的结果是这样的
    2006-11-08 00:00:00.000 1
    2006-11-07 00:00:00.000 1
    2006-11-07 00:00:00.000 1
    2006-11-06 00:00:00.000 1
    2006-11-04 00:00:00.000 1
    2006-11-02 00:00:00.000 1
    2006-11-01 00:00:00.000 1
    2006-11-08 00:00:00.000 0
    2006-11-07 00:00:00.000 0
    2006-11-05 00:00:00.000 0
    2006-11-03 00:00:00.000 0
    2006-11-03 00:00:00.000 0
    2006-11-02 00:00:00.000 0
    2006-11-01 00:00:00.000 0
    2006-11-01 00:00:00.000 0
    2006-11-01 00:00:00.000 0