查询数据库的时候 可以查询出每隔一段时间(比如2小时)这段时间段前3条数据 50

这个语句是不是办不到?有好的办法吗?http://zhidao.baidu.com/question/585248685.html?quesup2&oldq=1... 这个语句是不是办不到?有好的办法吗?
http://zhidao.baidu.com/question/585248685.html?quesup2&oldq=1
展开
 我来答
Andy_Sun321
推荐于2018-05-17 · TA获得超过1376个赞
知道小有建树答主
回答量:811
采纳率:89%
帮助的人:724万
展开全部

个人觉得难点在每隔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的记录

将这个逻辑套用过去, 大概能满足你的需求. 不过, 如果是经常执行这样的查询, 建议建一个字段存此时间间隔值或使用视图, 不然每次查询都有计算, 速度不好.

来自:求助得到的回答
数位汇聚
2023-08-28 广告
常见的查询城市人口数据途径有以下几个:1. 国家统计网站:中国各级单位及公众了解全国及各地区经济社会发展和人口变动情况的重要渠道之一。其网站可以查询全国及各地各级行政区域的人口数据,包括城市总人口、年龄结构、性别比例等。2. 地方统计网站:... 点击进入详情页
本回答由数位汇聚提供
syx54
2013-08-26 · TA获得超过7378个赞
知道大有可为答主
回答量:6567
采纳率:83%
帮助的人:2732万
展开全部
怎么会办不到?
思路:
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小时的数据  这个也把时间一一列出来???
追答
那要看你的具体要求?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tj_angela
2013-08-26 · TA获得超过7530个赞
知道大有可为答主
回答量:6797
采纳率:75%
帮助的人:2564万
展开全部
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是分组排序的函数
把时间按小时分组后再按时间排序,取最小的三个
你是什么数据库
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-08-26
展开全部
有时间间隔的执行,那肯定使用数据库的作业啦,你设置一个时间间隔,数据库自动帮你执行,还写啥sql,多低级啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式