这个语句是不是办不到?有好的办法吗?
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) -- 定义表变量将这个逻辑套用过去, 大概能满足你的需求. 不过, 如果是经常执行这样的查询, 建议建一个字段存此时间间隔值或使用视图, 不然每次查询都有计算, 速度不好.
来自:求助得到的回答那我想查询2013年1月到2013年8月份的所有每隔2小时的数据 这个也把时间一一列出来???
追答那要看你的具体要求?
追问从时间2013年1月到2013年8月份 每隔2小时并且这两小时前3条记录显示出来 这个怎么写~·~
追答思路:
1,做循环:按日期,时间,查询数据,把查到的记录,复制到一个表里
2,最后显示该表。
好麻烦~·~ 运行时间已经够慢的了还要用循环啊?还得建立到表中 最后还要删除表~·~~·~ 还有循环语句可以在SQL语句中写不?最后让服务器返回结果~·~???
亲~·~ 稍微解释一下你的语句啊~·~ 说在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
;