请教sql按时间间隔查询

kody008 2010-11-16 05:04:44

create table #demo
(
[value] int,
[time] datetime
)

insert into #demo values('24','2010-11-16 6:15:43');
insert into #demo values('25','2010-11-16 6:15:53');
insert into #demo values('26','2010-11-16 6:16:03');
insert into #demo values('26','2010-11-16 6:16:13');
insert into #demo values('26','2010-11-16 6:16:23');
insert into #demo values('26','2010-11-16 6:16:33');
insert into #demo values('26','2010-11-16 6:16:43');
insert into #demo values('26','2010-11-16 6:16:53');
insert into #demo values('23','2010-11-16 6:17:03');
insert into #demo values('23','2010-11-16 6:17:13');
insert into #demo values('23','2010-11-16 6:17:23');




例如选择按每分间隔查询则显示如下:
value time
26 2010-11-16 6:16:23
23 2010-11-16 6:17:23

即显示最后一个数据和往前推的每分钟一个数据
...全文
1021 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
kody008 2010-11-16
  • 打赏
  • 举报
回复
谢谢qianjin036a
-晴天 2010-11-16
  • 打赏
  • 举报
回复
测试了一下,如果是一个月的话,只加一个条件还不够,应该:
datediff(ss,super.time,sub.time)%86400=0 and datediff(mm,super.time,sub.time)=1 and right(convert(varchar(10),super.time),2)=right(convert(varchar(10),sub.time),2)
kody008 2010-11-16
  • 打赏
  • 举报
回复
谢谢qianjin036a

现在结贴,还有一个sql查询另开贴
-晴天 2010-11-16
  • 打赏
  • 举报
回复
呵呵,写快了,推一个月,要增加一个条件:
datediff(ss,super.time,sub.time)%86400=0 and datediff(mm,super.time,sub.time)=1
-晴天 2010-11-16
  • 打赏
  • 举报
回复
推一个月,要增加一个条件:
datediff(ss,super.time,sub.time)%60=0 and datediff(mm,super.time,sub.time)=1
-晴天 2010-11-16
  • 打赏
  • 举报
回复
推1小时,把
datediff(ss,super.time,sub.time)%60
改为
datediff(ss,super.time,sub.time)%3600
推 一天
改为
datediff(ss,super.time,sub.time)%86400
kody008 2010-11-16
  • 打赏
  • 举报
回复
谢谢qianjin036a

那按照这样的数据规律

我要以最后数据的时间和往前推1小时的数据又怎样差呢?

还有按天、月为时间间隔
tjj5203 2010-11-16
  • 打赏
  • 举报
回复

select value,time from #demo,(select MAX(time)MaxValue from #demo)T where DATEDIFF(SS,#demo.time,T.MaxValue)%60=0
-晴天 2010-11-16
  • 打赏
  • 举报
回复
create table #demo 
(
[value] int,
[time] datetime
)

insert into #demo values('24','2010-11-16 6:15:43');
insert into #demo values('25','2010-11-16 6:15:53');
insert into #demo values('26','2010-11-16 6:16:03');
insert into #demo values('26','2010-11-16 6:16:13');
insert into #demo values('26','2010-11-16 6:16:23');
insert into #demo values('26','2010-11-16 6:16:33');
insert into #demo values('26','2010-11-16 6:16:43');
insert into #demo values('26','2010-11-16 6:16:53');
insert into #demo values('23','2010-11-16 6:17:03');
insert into #demo values('23','2010-11-16 6:17:13');
insert into #demo values('23','2010-11-16 6:17:23');
go
select sub.[value],sub.[time] from #demo sub,(select * from #demo where time=(select max(time) from #demo)) super where datediff(ss,super.time,sub.time)%60=0
go
drop table #demo
/*
value time
----------- -----------------------
26 2010-11-16 06:16:23.000
23 2010-11-16 06:17:23.000

(2 行受影响)

*/
kody008 2010-11-16
  • 打赏
  • 举报
回复
你不明我的意思,不是指定23秒
因为数据
2010-11-16 6:17:23
是23秒

那它的前一分钟不就是
2010-11-16 6:16:23
这样吗?

就算其他时间也是一样
应该说是推前一分钟要精确到秒
-晴天 2010-11-16
  • 打赏
  • 举报
回复
create table #demo 
(
[value] int,
[time] datetime
)

insert into #demo values('24','2010-11-16 6:15:43');
insert into #demo values('25','2010-11-16 6:15:53');
insert into #demo values('26','2010-11-16 6:16:03');
insert into #demo values('26','2010-11-16 6:16:13');
insert into #demo values('26','2010-11-16 6:16:23');
insert into #demo values('26','2010-11-16 6:16:33');
insert into #demo values('26','2010-11-16 6:16:43');
insert into #demo values('26','2010-11-16 6:16:53');
insert into #demo values('23','2010-11-16 6:17:03');
insert into #demo values('23','2010-11-16 6:17:13');
insert into #demo values('23','2010-11-16 6:17:23');
go
select * from #demo sub,(select * from #demo where time=(select min(time) from #demo)) super where datediff(ss,super.time,sub.time)%60=0
go
drop table #demo
/*
value time value time
----------- ----------------------- ----------- -----------------------
24 2010-11-16 06:15:43.000 24 2010-11-16 06:15:43.000
26 2010-11-16 06:16:43.000 24 2010-11-16 06:15:43.000

(2 行受影响)

*/
claro 2010-11-16
  • 打赏
  • 举报
回复
比如这样的方式,或者table JOIN的方式。
with tbl (value,time) as (
select MAX(value),MAX(time)
from #demo
where DATEPART(s ,time)='23'
group by convert(varchar(10),time,20),DATEPART(hh,time),DATEPART(N,time)
)
select value,time from tbl
where DATEDIFF(N,time,'2010-11-16 06:18:20') < 3
claro 2010-11-16
  • 打赏
  • 举报
回复
很显然我郁闷了,如果之前您说明关于秒为何是23的话,我会高兴点。

必须指定23吗?如果是的话,建议在tbl的where条件中指定
kody008 2010-11-16
  • 打赏
  • 举报
回复
感谢claro回答
上一分钟是显示了 但是我要的效果是这样

value time
26 2010-11-16 6:16:23
23 2010-11-16 6:17:23

claro 2010-11-16
  • 打赏
  • 举报
回复
-_-!sorry
--try
with tbl (value,time) as (
select MAX(value),MAX(time)
from #demo
group by convert(varchar(10),time,20),DATEPART(hh,time),DATEPART(N,time)
)
select value,time from tbl
where DATEDIFF(N,time,'2010-11-16 06:18:20') < 3 --如果显示与指定时间前两条指定where。
--否则是往前推的每分钟一个数据,这里就不要条件判断,因为在tbl里面已经聚合。

--result:
value time
----------- -----------------------
26 2010-11-16 06:16:53.000
23 2010-11-16 06:17:23.000

(2 行受影响)

claro 2010-11-16
  • 打赏
  • 举报
回复
--try
with tbl (value,time) as (
select MAX(value),MAX(time)
from #demo
group by convert(varchar(10),time,20),DATEPART(hh,time),DATEPART(N,time)
)
select value,time from tbl
where DATEDIFF(N,time,'2010-11-16 06:18:20') < 3 --如果显示与指定时间前两条指定where。
--否则是往前推的每分钟一个数据,这里就不要条件判断,因为在tbl里面已经聚合。

--result:
value time
----------- -----------------------
26 2010-11-16 06:16:53.000
23 2010-11-16 06:17:23.000

(2 行受影响)
内容概要:本文围绕“基于共享储能服务的智能楼宇双层优化配置”展开研究,提出了一种结合上层共享储能配置优化与下层楼宇内部能源调度优化的双层协同模型,通过Matlab代码实现,旨在提升智能楼宇在复杂能源环境下的运行效率与经济性。研究充分考虑光伏出力、负荷需求等不确定性因素,引入多维核密度估计、场景生成与削减等技术进行不确定性建模,并融合需求响应、微电网调度等先进理念,实现了对综合能源系统中储能资源的高效配置与动态调控,具有较强的理论深度与工程应用价值。; 适合人群:具备电力系统、可再生能源、优化算法或综合能源系统等相关背景,从事科研、工程应用或课题研究的研发人员、研究生及高年级本科生。; 使用场景及目标:①应用于智能楼宇、园区微电网、虚拟电厂等场景中的储能规划与运行优化;②支撑高水平学术论文(如EI/SCI)的复现、课题申报、毕业设计及实际项目的双层优化建模与求解实践。; 阅读建议:建议结合提供的Matlab代码进行实操演练,重点理解双层优化架构的设计逻辑、求解策略(如Benders分解、主从博弈等)及不确定性处理方法,同时可参考文中关联技术(如场景生成、需求响应)拓展研究思路与应用场景。

22,296

社区成员

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

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