sql-server - SQL Server - 选择最接近 30 分钟间隔的行
问题描述
我们正在使用 SQL Server 2016:
这是我当前的表:
countx RunDateTime
104 7/15/20 0:05
104 7/15/20 0:10
102 7/15/20 0:15
102 7/15/20 0:20
100 7/15/20 0:25
100 7/15/20 0:30
102 7/15/20 0:35
99 7/15/20 0:40
97 7/15/20 0:46
99 7/15/20 0:56
93 7/15/20 1:01
93 7/15/20 1:10
93 7/15/20 1:16
91 7/15/20 1:31
89 7/15/20 1:39
87 7/15/20 1:57
88 7/15/20 2:05
80 7/15/20 2:11
81 7/15/20 2:20
我只想要以下结果
countx RunDateTime 104 7/15/20 0:05 100 7/15/20 0:30 93 7/15/20 1:01 91 7/15/20 1:31 88 7/15/20 2:05
我怎么能只选择最接近最近的 30 分钟间隔的行?
我只想要最接近一小时和最接近半小时的行
例如,我只想要最接近的行
00:00 和 00:30
01:00 和 01:30
02:00 和 02:30
等等
我能够选择最接近小时的行,但我不知道如何获取最接近半小时的数据。这是我尝试过的。
SELECT
RunDateTime,
COUNT(DISTINCT id) countxbyhour
FROM (SELECT
t.*,
MIN(RunDateTime) OVER(PARTITION BY CAST(RunDateTime AS DATE),
DATEPART(HOUR,RunDateTime)) mintmstmp
FROM table t) x
WHERE RunDateTime = mintmstmp
GROUP BY RunDateTime
ORDER BY RunDateTime
解决方案
基于杰森的:
declare @t table(countx int, RunDateTime datetime);
insert into @t values
(104, '7/15/20 0:05'),
(104, '7/15/20 0:10'),
(102, '7/15/20 0:15'),
(102, '7/15/20 0:20'),
(100, '7/15/20 0:25'),
(100, '7/15/20 0:30'),
(102, '7/15/20 0:35'),
(99, '7/15/20 0:40'),
(97, '7/15/20 0:46'),
(99, '7/15/20 0:56'),
(93, '7/15/20 1:01'),
(93, '7/15/20 1:10'),
(93, '7/15/20 1:16'),
(91, '7/15/20 1:31'),
(89, '7/15/20 1:39'),
(87, '7/15/20 1:57'),
(88, '7/15/20 2:05'),
(80, '7/15/20 2:11'),
(81, '7/15/20 2:20');
WITH CTE AS
(--get data and dif
select *, ROW_NUMBER() OVER (PARTITION BY (countx) ORDER BY (CASE WHEN DATEPART(MINUTE, RunDateTime) >= 30
THEN (DATEPART(MINUTE, RunDateTime) - 30) / 30.0
ELSE DATEPART(MINUTE, RunDateTime) / 30.0
END)) as rowno
from @t
)
select *
from
CTE
where
CTE.rowno = 1;
推荐阅读
- django - Django REST Serializer 使用错误的模型进行序列化
- python - python文件写入程序运行时如何更新桌面上的文件大小
- javascript - 使用 d3.js 更新表数据
- c# - C#捕获从不在进程中的函数返回的异常?
- r - 如何设置仅在输入 3 时才显示集合向量的函数?
- javascript - 如果 URI 没有改变,例如在单页应用程序上,如何检测用户是否在新页面上?
- angular - Angular Kendo UI 全局访问
- php - 内连接循环通过
- git - 如何 git rebase 从另一个分支直接到 master 分支?
- javascript - 受控数字比例映射