高手请进!!在线等~~~有无直接的SQL语句可以解决问题呢?

zjnbwyg 2013-01-05 09:58:56
环境 php+mysql
要求 随机抽取连续的N条记录 N比如为3 ,同时要求抽取的N条记录的时间是连续的,
比如抽取连续3条记录为18:00 19:00 20:00符合
13:00 15:00 16:00 虽然为连续3条记录但不符合时间差
yysj
2013-01-05 13:00:00
2013-01-05 15:00:00
2013-01-05 16:00:00
2013-01-05 18:00:00
2013-01-05 19:00:00
2013-01-05 20:00:00
2013-01-05 22:00:00
2013-01-05 23:00:00
2013-01-06 00:00:00
2013-01-06 01:00:00
2013-01-06 02:00:00
...全文
249 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
床上等您 2013-01-08
  • 打赏
  • 举报
回复
数据多不?如果不多,就一次拿出来,然后在php里排序,随机取一个,然后再随机向前向后取,直到成功为止
xiaoji7561 2013-01-07
  • 打赏
  • 举报
回复
同意楼上,感觉你可以把数据都取出来,然后用php去找你需要的,这样简单多了
夏之冰雪 2013-01-07
  • 打赏
  • 举报
回复
2013-01-04 23:00:00 2013-01-05 00:00:00 2013-01-05 01:00:00 这个也是符合要求的,感觉很难办。 一天最多24条记录,看你需求了,你要是取的天数很少,没必要写一条,都取下来,数据解析一下也能得到结果的。
For_You 2013-01-06
  • 打赏
  • 举报
回复
不明白 13:00 15:00 16:00 为什么不符合呢。时间是连续的 切后面的数据没有 在13:00-16:00 之间的数据
改一下昵称 2013-01-06
  • 打赏
  • 举报
回复
select t1.t as d1, t2.t as d2, t3.t as d3 from hello as t1 
left join hello as t2 on timestampdiff(HOUR, t2.t, t1.t) = 1 
left join hello as t3 on timestampdiff(HOUR, t3.t, t2.t) = 1 
where t2.t is not null and t3.t is not null 
order by rand() limit 1
然后你可以通过for N来动态生成SQL语句。这种方式效率很差,而且也不是最好的方案。 MYSQL版有很多大牛可以解决你的困惑
anydy2008 2013-01-06
  • 打赏
  • 举报
回复
先用php算好需要取得数据 再作为条件值传进去行不 ?
zjnbwyg 2013-01-06
  • 打赏
  • 举报
回复
所以愁啊!!
www_7di_net 2013-01-06
  • 打赏
  • 举报
回复
你这个要求蛮特殊的,实现起来破费周折,我说下思路 首先取一个随机的基准点,假如是 15:00 ,那么接下来你要取得值应该是 16:00 17:00 这里你要注意一下,如果你取得的这个基准点15:00已经是最后一条记录了,你该怎么办? 有了基准点之后接下来的两条数据 你就可以分别加一小时得出来了,好了有了这三个数据的参照之后你就可以提取了,类似 select ? from ? where time='基准点1' or time='基准点2' or time='基准点3' 但是你还要应付突发状况,那就是假如只能取得两条数据或一条数据你该怎么办?
www_7di_net 2013-01-06
  • 打赏
  • 举报
回复
你的要求很特殊,一条sql解决不了

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧