永发信息网

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

答案:4  悬赏:20  手机版
解决时间 2021-03-11 13:48
  • 提问者网友:太高姿态
  • 2021-03-10 21:52
这个语句是不是办不到?有好的办法吗?
http://wenwen.sogou.com/z/q801923681.htm?quesup2&oldq=1
最佳答案
  • 五星知识达人网友:躲不过心动
  • 2021-03-10 22:06
个人觉得难点在每隔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的记录将这个逻辑套用过去, 大概能满足你的需求. 不过, 如果是经常执行这样的查询, 建议建一个字段存此时间间隔值或使用视图, 不然每次查询都有计算, 速度不好.
全部回答
  • 1楼网友:低血压的长颈鹿
  • 2021-03-10 23:54
给你个思路吧,你这个其实就是和判断某个字段不能重复一样的意思。 不用时间类型。你可以这样,当老师申请的时候把老师申请的周数和课时都按一定格式转成字符串型存到数据库中。 比如在表中建一个字段表是第几周开始start,再建一个表示第几周结束end,再建一个表时老师需要的课时aaa。 这样的表在存你给的信息的时候,就是 start end aaa 1 19 1,2 前两个字段可以按int型存.最后一个按string存. 别的老师申请的时候先判申请第几节课,如果也是1,2节课,再判断周.如果申请start大于数据库里同类数据,end又小的话。就是在范围内,提示不可申请。如果start小于.end大于则也不可以申请. 只有开始和结束都大于end或都小于start才可以。 至于课时判断,你可以用string下的indexof这个是判断字符串中是否存在某些字符的。 你也可以跟据你的需要加些小功能,比如老师申请失败以后提示他哪几周有老师在用。其实就是显示出aaa这段相等的话 start和end的值。更多功能尽在你的想象力。 祝你完成毕业设计,写的有点笼统。若还哪不明白的话可以追问我。
  • 2楼网友:梦中风几里
  • 2021-03-10 23:05
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的话更加简单
  • 3楼网友:孤独的牧羊人
  • 2021-03-10 22:42
怎么会办不到? 思路: 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 时间"
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯