查询数据库的时候 可以查询出每隔一段时间(比如2小时)这段时间段前3条数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了查询数据库的时候 可以查询出每隔一段时间(比如2小时)这段时间段前3条数据相关的知识,希望对你有一定的参考价值。
这个语句是不是办不到?有好的办法吗?
http://zhidao.baidu.com/question/585248685.html?quesup2&oldq=1
个人觉得难点在每隔2小时怎么取, 我的方式是取日期(0时0分0秒)然后加上小时数除以2作为标志每2小时的时间间隔(如果时间间隔不是整的小时, 且可以被24整除, 那么尚未想到好的方法); 而取前3条记录则有row_number分组函数可以使用.
示例(SQL Server 2005或以上)如下:
declare @tb table (ss int, dt datetime) -- 定义表变量insert into @tb -- 插入测试用数据
select 1, '2013/1/20 12:01'
union
select 7, '2013/1/20 12:01'
union
select 3, '2013/1/20 13:21'
union
select 8, '2013/1/20 13:13'
union
select 5, '2013/1/20 12:049'
-- 测试SQL, dt为时间值, hourSpan为分在哪个时间间隔内
select ss, dt, hourSpan
from (
-- 用row_number来按时间间隔分组编号, 且按ss字段升序编号
select ss, row_number() over (partition by convert(nvarchar(10), dt, 120) + '_' + cast(datepart(hour, dt) / 2 as nvarchar(2)) order by ss) as rownumber, dt, convert(nvarchar(10), dt, 120) + '_' + cast(datepart(hour, dt) / 2 as nvarchar(2)) as hourSpan
from @tb
) s
where s.rownumber <= 3 -- 取分组编号值小于等于3的记录
将这个逻辑套用过去, 大概能满足你的需求. 不过, 如果是经常执行这样的查询, 建议建一个字段存此时间间隔值或使用视图, 不然每次查询都有计算, 速度不好.
来自:求助得到的回答 参考技术A 怎么会办不到?思路:
1,所谓间隔2小时,这个时间的相对值,首先要确定。比如:以上午8点开始,到晚上8点结束。
那么要查询的时间就是:
>= 8点 and < 10 点
>= 10点 and < 12 点
>= 12点 and < 14 点
>= 14点 and < 16 点
>= 16点 and < 18 点
>= 18点 and < 20 点
关键是,SQL语句中的Where子句,对日期/时间类型查询,要将该类值用#号引起来:
比如:
要返回10点到12点的前三条记录记录
"Select Top 3 * From 表2 Where 时间>=#10:00# and 时间<=#12:00:00# Order By 时间"追问
那我想查询2013年1月到2013年8月份的所有每隔2小时的数据 这个也把时间一一列出来???
追答那要看你的具体要求?
追问从时间2013年1月到2013年8月份 每隔2小时并且这两小时前3条记录显示出来 这个怎么写~·~
追答思路:
1,做循环:按日期,时间,查询数据,把查到的记录,复制到一个表里
2,最后显示该表。
好麻烦~·~ 运行时间已经够慢的了还要用循环啊?还得建立到表中 最后还要删除表~·~~·~ 还有循环语句可以在SQL语句中写不?最后让服务器返回结果~·~???
参考技术B select newtime,date,其他字段from (
select convert(varchar(13) ,date, 120) newtime,date,其他字段,
rank() over (partition by convert(varchar(13) ,date, 120) order by date asc) rn
from table
where date between .... and ....
)
where rn<=3
order by 1
;
随便写个sqlserver的例子,如果是其他数据库可以再问,^_^
oracle的话更加简单追问
亲~·~ 稍微解释一下你的语句啊~·~ 说在rank()那里有错误 自己理解了下也百度了下语句 没有太明白~·~ 解释下吧~~·~~
追答rank是分组排序的函数
把时间按小时分组后再按时间排序,取最小的三个
你是什么数据库
SQL Server的数据库 你这个是每隔2小时取得数据吗?
我换一下问题~·~行不~~
每隔2小时取 这两小时中字段“ss”最小的数据
隔2小时 就把小时除以2再分组就可以了
追问好奇怪的查询结果~·~ 你能不能把QQ号码留下 我具体问问 如果不方便的话 那就继续在这里回答我的问题吧
那你能不能省去那些有的没的直接写一条语句来
我为这个语句愁死了要~~·~~
数据表里有“时间”字段记录着时间
查询时间在2013年1月到2013年8月份每隔2小时且 每2小时中第一个数据(因为不一定整点有数据)~·~
--怎么又只要第一个数据了,你要自己学啊,给你了例子就要举一反三
select 日期,时间,其他字段
from (
select convert(varchar(13) ,date, 112) 日期,时间,其他字段,
rank() over (partition by substring(replace(replace(CONVERT(varchar, 时间,120 ),'-',''),' ',''),1,10)/2 order by 时间 asc) rn
from table
where 时间 between .... and ....
)
where rn<=1
order by 1,2
;
vue中如何每隔一段时间请求一次后台数据?
需求是这样的, 当天的每小时的零五分钟请求一次接口。
这个要怎么实现,比如一点的零五分钟,两点的零五分钟,三点的零五分钟...等等一直往后排。
这个功能怎么实现呢? 各位路过大神帮忙一下。。。
methods:
addTimer ()
var date = new Date()
if (date.getMinutes === 5)
setInterval(() =>
funABC().......
, 3900000)
mounted ()
var timer = setInterval(() =>
var date = new Date()
if (date.getMinutes === 5)
clearInterval(timer )
else
this.addTimer ()
)
以上是关于查询数据库的时候 可以查询出每隔一段时间(比如2小时)这段时间段前3条数据的主要内容,如果未能解决你的问题,请参考以下文章