日期:2014-05-16  浏览次数:20739 次

[100分]菜鸟问题,以时间为排序,给定一个时间段,和一个数字n,要求顺序获取这个时间段之前的n个记录和时间段的记录
1. 时间段 : time1 --------> time2
2. 给定一个数字: n


要求:

以时间为顺序,获取 time1 之前的 n个数据 和 time1->time2 的数据的 合集。




能不能有什么简单点的办法。

我现在是分两步获取的。

求助各位大大,讲解一下思路,刚刚开始接触数据库,谢谢!



------解决方案--------------------
用union
(select * from #table where #time between time1, time2)
union
(select * from #table where #time < time1 limit n)
------解决方案--------------------
更正一下,between 的写法应该是
between time1 and time2
------解决方案--------------------
SQL code
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)

------解决方案--------------------
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;
------解决方案--------------------
贴建表及插入记录的SQL,及要求结果出来看看
------解决方案--------------------
第一步
union all
第二步
------解决方案--------------------
有一句没理解,“time1之前的N个数据”是什么意思,是时间到达time1前的紧贴time1的N个数据,还是time1之前所有记录的最前N条数据。
如果是第一个理解的话,那么楼上几位基本都错了,应该对ID先倒序,再取limit N
语法没什么问题。
------解决方案--------------------
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)
------解决方案--------------------
1、WQI SVFI 如果 10:00以前没有5个数据,就返回错误。就必须计算是否有5个数据,再做处理
2、不用UNION,是两个结果集,自己权衡一下。