1. 时间段 :    time1 --------> time2
2. 给定一个数字: n
要求:以时间为顺序,获取    time1 之前的 n个数据 和 time1->time2 的数据的 合集。
能不能有什么简单点的办法。我现在是分两步获取的。求助各位大大,讲解一下思路,刚刚开始接触数据库,谢谢!

解决方案 »

  1.   

    用union
    (select * from #table where #time between time1, time2)
    union
    (select * from #table where #time < time1 limit n)
      

  2.   

    更正一下,between 的写法应该是
    between time1 and time2
      

  3.   

    Select * From(Select * From T where DATETIME<TIME1 order by ID limit n)S order by ID
    union all
    (Select * From T where DATETIME BETWEEN TIME1 AND TIME2)
      

  4.   

    1. 时间段 : time1 --------> time2
    2. 给定一个数字: n
    要求:以时间为顺序,获取 time1 之前的 n个数据 和 time1->time2 的数据的 合集。
    SET @ASQL=CONCAT('SELECT * FROM TT WHERE TIME<time1 LIMIT ',N,' UNION ALL ','SELECT * FROM TT WHERE TIME between time1 and time2');
    PREPARE STML FROM @ASQL;
    EXECUTE STML;
      

  5.   

    贴建表及插入记录的SQL,及要求结果出来看看
      

  6.   

    第一步
    union all
    第二步
      

  7.   

    有一句没理解,“time1之前的N个数据”是什么意思,是时间到达time1前的紧贴time1的N个数据,还是time1之前所有记录的最前N条数据。
    如果是第一个理解的话,那么楼上几位基本都错了,应该对ID先倒序,再取limit N
    语法没什么问题。
      

  8.   

    select * from table1 where 时间 between '2011-04-01' and '2011-04-21'
    union all
    (select * from table1 where 时间 < '2011-04-01' order by 时间 desc limit 10)
      

  9.   

    其实就是比如 求  10:00 以前的(不包含10:00)5个数据 和 10:00-12:00(包含10和12) 之间的数据要求顺序排列。还有一个问题,忘记说了,对不起!
    如果 10:00以前没有5个数据,就返回错误。必须要求满足有5个数据, 而10:00-12:00中间有没有数据无所谓。能否简单实现?而不用另外加一条 count?
      

  10.   


    1.关于取前 n 条数据,是要紧贴time1的, 所以大家和我当初想的一样,先倒序列,然后取值,然后再倒回来,那是否我count time1之前的数据个数,然后 limit offset 更好更快?
    2. union 语句和 分成两条没啥区别吧,汗
      

  11.   

    1、WQI SVFI 如果 10:00以前没有5个数据,就返回错误。就必须计算是否有5个数据,再做处理
    2、不用UNION,是两个结果集,自己权衡一下。