如何取最接近整点数据

huamaolin 2009-02-24 11:07:07
日报表中需要数据为0:00-23:00的整点数据,取最接近整点数据....

数据库data中datetime类型的time项

这个SQL怎么写


在线等....
...全文
434 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
ycagri 2009-10-30
  • 打赏
  • 举报
回复
这个有点难度
如果是用该时间最大或是最小来代替该整点的数据,还是比较容易些
huamaolin 2009-02-24
  • 打赏
  • 举报
回复
嗯 感谢大家的帮助 不能贴图 就上传点数据 ....

id portid tstamp immFlux totalFlux currAmount
3348 11 2004-1-12 13:07:00 105.75 1020888 1495
3349 11 2004-1-12 13:30:00 83.32 1021026 1633
3350 11 2004-1-12 13:54:00 61.26 1021122 1729
3351 11 2004-1-12 14:11:00 63.59 1021191 1798
3352 11 2004-1-12 14:17:00 57.84 1021214 1821
3353 11 2004-1-12 14:35:00 61.26 1021276 1883
3354 11 2004-1-12 14:41:00 60.69 1021299 1906
3355 11 2004-1-12 15:05:00 56.72 1021381 1988
3356 11 2004-1-12 15:29:00 57.84 1021462 2069
3357 11 2004-1-12 15:52:00 65.35 1021550 2157
3358 11 2004-1-12 16:10:00 66.54 1021621 2228
3359 11 2004-1-12 16:16:00 66.54 1021644 2251
3360 11 2004-1-12 16:40:00 66.54 1021738 2345
3361 11 2004-1-12 17:03:00 66.54 1021832 2439
3362 11 2004-1-12 17:27:00 66.54 1021927 2534
3363 11 2004-1-12 17:51:00 93.93 1022046 2653
3364 11 2004-1-12 18:11:00 93.26 1022158 2765
3365 11 2004-1-12 18:14:00 101.51 1022179 2786
3366 11 2004-1-12 18:38:00 98.73 1022327 2934
3367 11 2004-1-12 19:02:00 79.46 1022451 3058
3368 11 2004-1-12 19:25:00 60.12 1022552 3159
3369 11 2004-1-12 19:49:00 67.73 1022647 3254
3370 11 2004-1-12 20:13:00 78.2 1022754 3361
3371 11 2004-1-12 20:37:00 75.06 1022866 3473

数据是这样的
要求时 获取 每天 0:00-24:00时间断中的整点数据(去最接近该整点的一条数据)
做出日报表 日报表显示 0:00-24:00时间断 整点即24条数据
子陌红尘 2009-02-24
  • 打赏
  • 举报
回复
需要考虑取得的时间小于或者大于整点的两种情况;如果只取一条:


declare @tb table(dt datetime)
insert into @tb values('2009-02-24 01:00:02')
insert into @tb values('2009-02-24 01:00:03')
insert into @tb values('2009-02-24 01:00:04')
insert into @tb values('2009-02-24 01:59:57')
insert into @tb values('2009-02-24 01:59:58')
insert into @tb values('2009-02-24 01:59:59')
insert into @tb values('2009-02-24 02:10:02')
insert into @tb values('2009-02-24 02:10:03')
insert into @tb values('2009-02-24 02:58:59')
insert into @tb values('2009-02-24 03:03:01')
insert into @tb values('2009-02-24 03:20:11')

select
top 1 b.dt
from
(select distinct convert(char(13),dt,120)+':00:00' as dt from @tb
union
select distinct convert(char(13),dateadd(hh,1,dt),120)+':00:00' from @tb) a,
@tb b
order by
abs(datediff(ss,a.dt,b.dt))

/*
dt
------------------------------------------------------
2009-02-24 01:59:59.000
*/
dobear_0922 2009-02-24
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 libin_ftsafe 的回复:]
对每个小时取还是只取所有时间中,最接近整点的那一条记录?
[/Quote]

同问,楼主贴点数据和想要的结果
claro 2009-02-24
  • 打赏
  • 举报
回复
帮顶
应该有规则,不然ry看。
子陌红尘 2009-02-24
  • 打赏
  • 举报
回复
对每个小时取还是只取所有时间中,最接近整点的那一条记录?
you_tube 2009-02-24
  • 打赏
  • 举报
回复
楼上写错了,不好意思


declare @tb table(dt datetime)
insert into @tb values('2009-02-24 01:00:01')
insert into @tb values('2009-02-24 01:00:02')
insert into @tb values('2009-02-24 01:00:03')
insert into @tb values('2009-02-24 02:10:01')
insert into @tb values('2009-02-24 02:10:03')
insert into @tb values('2009-02-24 03:20:11')
insert into @tb values('2009-02-24 03:03:01')

declare @Date datetime
set @Date ='2009-02-24 02:10:01.000'
select top 1 * from @tb
where dt <> @Date
order by abs(datediff(mi,dt,@Date))

结果:
dt
-----------------------
2009-02-24 02:10:03.000
you_tube 2009-02-24
  • 打赏
  • 举报
回复
借用楼上数据

declare @tb table(dt datetime)
insert into @tb values('2009-02-24 01:00:01')
insert into @tb values('2009-02-24 01:00:02')
insert into @tb values('2009-02-24 01:00:03')
insert into @tb values('2009-02-24 02:10:01')
insert into @tb values('2009-02-24 02:10:03')
insert into @tb values('2009-02-24 03:20:11')
insert into @tb values('2009-02-24 03:03:01')

declare @Date datetime
set @Date ='2009-02-24 02:10:01.000'
select top 1 * from @tb
order by abs(datediff(mi,dt,@Date))

结果:
dt
-----------------------
2009-02-24 02:10:01.000
liangCK 2009-02-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 huamaolin 的回复:]
额 。就是 一小时内的数据有N个 怎么取得最接近 整点的数据。。。。
[/Quote]

最近接整点的1个数据?

整些数据出来看看.
dawugui 2009-02-24
  • 打赏
  • 举报
回复
假设表TB
字段DT

create table tb(dt datetime)
insert into tb values('2009-02-24 01:00:01')
insert into tb values('2009-02-24 01:00:02')
insert into tb values('2009-02-24 01:00:03')
insert into tb values('2009-02-24 02:10:01')
insert into tb values('2009-02-24 02:10:03')
insert into tb values('2009-02-24 03:20:11')
insert into tb values('2009-02-24 03:03:01')
go

select m.* from tb m ,
(select convert(varchar(13),dt,120)+':00:00' dt, min(abs(datediff(ss , dt , convert(varchar(13),dt,120)+':00:00'))) ss from tb group by convert(varchar(13),dt,120)+':00:00') n
where convert(varchar(13),m.dt,120)+':00:00' = n.dt and abs(datediff(ss,m.dt,n.dt)) = n.ss

drop table tb

/*
dt
------------------------------------------------------
2009-02-24 01:00:01.000
2009-02-24 02:10:01.000
2009-02-24 03:03:01.000

(所影响的行数为 3 行)
*/

sdhdy 2009-02-24
  • 打赏
  • 举报
回复

select CONVERT(varchar(3) , getdate(), 114 )+'00:00'
huamaolin 2009-02-24
  • 打赏
  • 举报
回复
额 。就是 一小时内的数据有N个 怎么取得最接近 整点的数据。。。。
sdhdy 2009-02-24
  • 打赏
  • 举报
回复
select CONVERT(varchar(8) , getdate(), 114 )
liangCK 2009-02-24
  • 打赏
  • 举报
回复
[Quote=引用楼主 huamaolin 的帖子:]
日报表中需要数据为0:00-23:00的整点数据,取最接近整点数据....

数据库data中datetime类型的time项

这个SQL怎么写


在线等....
[/Quote]

没看懂。
huamaolin 2009-02-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 dawugui 的回复:]
假设表TB
字段DT


SQL codecreate table tb(dt datetime)
insert into tb values('2009-02-24 01:00:01')
insert into tb values('2009-02-24 01:00:02')
insert into tb values('2009-02-24 01:00:03')
insert into tb values('2009-02-24 02:10:01')
insert into tb values('2009-02-24 02:10:03')
insert into tb values('2009-02-24 03:20:11')
insert into tb values('2009-02-24 03:03:01')
go

select m…
[/Quote]

查询分析器中可以执行 可是速度很慢 出来后数据有1W+条
建立视图 执行 返回超时已过期
有没有简单一点的啊
老师讲解讲解

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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