SQL server如何在一定时间范围内, 按整点统计数据?

粹白 2018-02-05 11:45:04
新手一枚, 2天了还是没找到办法, 希望各位前辈能来赐教




SQL server2008 表里是近2年, 每天定时记录的数据.
现在需要取出在指定范围内, 每天整点的数据; 如果没有整点数据, 就按照最接近整点的时间点取.

咋办捏咋办捏, 望指点!!
...全文
829 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
粹白 2018-02-05
  • 打赏
  • 举报
回复
数据的时间间隔没有固定规律,有些是整点过后30分钟才有数据
粹白 2018-02-05
  • 打赏
  • 举报
回复
引用 4 楼 t101lian 的回复:
   SELECT   *
   FROM     ( SELECT    ROW_NUMBER() OVER ( PARTITION BY CONVERT(VARCHAR(13), DH_DataTime, 120)
    ORDER BY DH_DataTime ) AS num , * FROM  表名  ) a
   WHERE    num = 1;
弄好了, 谢谢!
t101lian 2018-02-05
  • 打赏
  • 举报
回复
   SELECT   *
   FROM     ( SELECT    ROW_NUMBER() OVER ( PARTITION BY CONVERT(VARCHAR(13), DH_DataTime, 120)
    ORDER BY DH_DataTime ) AS num , * FROM  表名  ) a
   WHERE    num = 1;
t101lian 2018-02-05
  • 打赏
  • 举报
回复
   SELECT * FROM (
   SELECT ROW_NUMBER() OVER(PARTITION BY CONVERT(varchar(13),DH_DataTime,120) ORDER BY DH_DataTime) AS num  ,
 * FROM 表名
 ) a WHERE num=1
听雨停了 2018-02-05
  • 打赏
  • 举报
回复

IF OBJECT_ID('tempdb..#tab') IS NOT NULL
DROP TABLE #tab
CREATE TABLE #tab(
dh_datetime DATETIME
)
DECLARE @i INT,
@a INT
SET @a=1
SET @i=1000
WHILE @a<@i
BEGIN
INSERT INTO #tab
SELECT dateadd(minute,@a,GETDATE())
SET @a=@a+1
END
SELECT * FROM #tab
--测试数据结束


DECLARE @begindt DATETIME, --指定范围开始时间
@endtime DATETIME --指定范围结束时间
SET @begindt='2018-02-05 13:42:05.320'
SET @endtime='2018-02-06 06:20:05.433'
;WITH cte AS (
SELECT *,
ROW_NUMBER() OVER(
PARTITION BY CAST(dh_datetime AS DATE),
DATEPART(hour, dh_datetime) ORDER BY dh_datetime
) AS rn
FROM #tab
WHERE dh_datetime BETWEEN @begindt AND @endtime
)
SELECT dh_datetime FROM cte
WHERE rn=1

22,209

社区成员

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

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