【发布时间】:2018-09-24 15:14:04
【问题描述】:
我正在寻找按日期时间值在分区上运行窗口函数的最佳方法。但是,我希望按日期时间进行分区,而不是按确切时间进行分区,例如彼此相隔 15 分钟之内。
这是我桌子的一小块。
CREATE TABLE my_table(ID VARCHAR(5), in_time DATETIME)
INSERT INTO my_table (ID, in_time) VALUES
('4844', '2017-04-06 10:15:00.000'),
('5221', '2017-11-24 11:18:00.000'),
('5221', '2017-11-24 11:18:00.000'),
('5221', '2017-11-25 14:23:00.000'),
('8486', '2017-10-10 15:30:00.000'),
('8486', '2017-10-10 15:32:00.000'),
('8486', '2017-10-10 15:46:00.000'), -- new row after updating question
('8486', '2017-10-10 16:00:00.000') -- new row after updating question
这是我现在使用的查询:
SELECT *,
ROW_NUMBER() OVER(PARTITION BY ID, in_time ORDER BY ID, in_time) AS filter_row
FROM my_table
正如预期的那样:
ID in_time filter_row
4844 2017-04-06 10:15:00.000 1
5221 2017-11-24 11:18:00.000 1
5221 2017-11-24 11:18:00.000 2
5221 2017-11-25 14:23:00.000 1
8486 2017-10-10 15:30:00.000 1
8486 2017-10-10 15:32:00.000 1
8486 2017-10-10 15:46:00.000 1
8486 2017-10-10 16:00:00.000 1
我想要实现的是:
ID in_time filter_row
4844 2017-04-06 10:15:00.000 1
5221 2017-11-24 11:18:00.000 1
5221 2017-11-24 11:18:00.000 2
5221 2017-11-25 14:23:00.000 1
8486 2017-10-10 15:30:00.000 1
8486 2017-10-10 15:32:00.000 2 -- < notice the 2 here
8486 2017-10-10 15:46:00.000 3 -- < notice the 3 here
8486 2017-10-10 16:00:00.000 4 -- < notice the 4 here
正如您在上面看到的那样,ID = 8486 的行应该被分区在一起,因为它们各自的in_time 和上面一行的in_time 之间只有 2、14 和 14 分钟。如何有效地做到这一点?
【问题讨论】:
标签: sql sql-server datetime window-functions