sql取出离当前时间最近的8小时内每30分钟的数据

muse_z 2018-04-03 10:22:02
现在项目需求是展示一个折线图 数据就是当前时间内往前推8个小时的数据 8小时内每30分钟取一条 求大神
...全文
1170 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
吉普赛的歌 2018-04-03
  • 打赏
  • 举报
回复
;WITH cte AS(
	SELECT DATEADD(minute,sv.number*5, Convert(CHAR(10),GETDATE(),120)) AS d 
	FROM [master].dbo.spt_values AS sv 
	WHERE sv.[type]='P' AND sv.number BETWEEN 0 AND 287 
	UNION ALL
	SELECT DATEADD(minute,sv.number*5, Convert(CHAR(10),GETDATE()-1,120)) AS d 
	FROM [master].dbo.spt_values AS sv 
	WHERE sv.[type]='P' AND sv.number BETWEEN 0 AND 287
	--构建两天的数据
)
,cte2 AS (
	SELECT MAX(d) AS d FROM cte WHERE d<GETDATE()	
)
,t1 AS(
	SELECT ROW_NUMBER() OVER (ORDER BY d DESC) AS rid,* 
	FROM cte
	WHERE d BETWEEN DATEADD(hour,-8,(SELECT d FROM cte2)) AND (SELECT d FROM cte2)
)
SELECT d
FROM t1
WHERE (rid-1)%6=0
ORDER BY d DESC;
/*
2018-04-03 11:45:00.000
2018-04-03 11:15:00.000
2018-04-03 10:45:00.000
2018-04-03 10:15:00.000
2018-04-03 09:45:00.000
2018-04-03 09:15:00.000
2018-04-03 08:45:00.000
2018-04-03 08:15:00.000
2018-04-03 07:45:00.000
2018-04-03 07:15:00.000
2018-04-03 06:45:00.000
2018-04-03 06:15:00.000
2018-04-03 05:45:00.000
2018-04-03 05:15:00.000
2018-04-03 04:45:00.000
2018-04-03 04:15:00.000
2018-04-03 03:45:00.000
*/
muse_z 2018-04-03
  • 打赏
  • 举报
回复
引用 1 楼 roy_88 的回复:
这应该由程序去实现曲线图 数据库取数据,30分取一条是取最近那一条? 比如 <10:00的最近一条数据?
是这样 比如说 现在时间是11:06分 然后数据库最新的一条数据是11:05分 那么取到的就是从早上3:05分到11:05分的数据 如果3:05分没数据就取最近的一条 应该是一分钟一条数据 然后拿到这些数据在按照间隔30分钟一取
muse_z 2018-04-03
  • 打赏
  • 举报
回复
是这样 比如说 现在时间是11:06分 然后数据库最新的一条数据是11:05分 那么取到的就是从早上3:05分到11:05分的数据 如果3:05分没数据就取最近的一条 应该是一分钟一条数据 然后拿到这些数据在按照间隔30分钟一取
中国风 2018-04-03
  • 打赏
  • 举报
回复
这应该由程序去实现曲线图 数据库取数据,30分取一条是取最近那一条? 比如 <10:00的最近一条数据?

590

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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