【发布时间】:2021-02-20 05:08:20
【问题描述】:
我需要查找所有大于 5 的记录,但要从上次大于 5 开始连续查找。请注意,我可以有不同的 FormID。
FormID Value LogDate
Form1 6 10/12/19
Form1 7 10/12/19
Form1 4 10/14/19
Form1 8 10/20/19
Form1 9 10/21/19
在上面的示例中,结果如下:
FormID Value LogDate row_num
Form1 8 10/20/19 1
Form1 9 10/21/19 2
因为我们有 2 条记录连续超过 5 条。
示例 2:
FormID Value LogDate
Form1 6 10/12/19
Form1 7 10/12/19
Form1 6 10/14/19
Form1 3 10/20/19
Form1 9 10/21/19
在上面的例子中,结果是:
FormID Value LogDate row_num
Form1 9 10/21/19 1
示例 3:
FormID Value LogDate
Form1 6 10/12/19
Form1 7 10/12/19
Form1 6 10/14/19
Form1 3 10/20/19
Form1 4 10/21/19
小于5的值4之后不会显示任何值,最近没有大于5的记录。
示例 4:
FormID Value LogDate
Form2 6 10/12/19
Form2 7 10/13/19
Form1 6 10/12/19
Form1 7 10/12/19
Form1 6 10/14/19
Form1 3 10/15/19
Form1 6 10/15/19
Form1 2 10/20/19
在这种情况下,我们应该看到以下内容:
FormID Value LogDate row_num
Form2 6 10/12/19 1
Form2 7 10/13/19 2
Form1 没有任何数据,因为在最近一次的值为 2 之后超过 5 次,因此没有数据。
下面是一个开始的示例脚本
DECLARE @table1 TABLE
(
FormID VARCHAR(50),
[Value] INT,
LogDate DATETIME
)
INSERT INTO @table1
VALUES
('Form2',6,'10/12/19'),
('Form2',7,'10/13/19'),
('Form1',6,'10/12/19') ,
('Form1',7, '10/12/19') ,
('Form1',6,'10/14/19') ,
('Form1',3,'10/15/19'),
('Form1', 4, '10/21/19'),
('Form1',6, '10/21/19'),
('Form1', 6, '10/21/19'),
('Form1', 2, '10/25/19')
select FormID,
Value, LogDate,
Row_number()
OVER(
PARTITION BY FormID
ORDER BY LogDate) AS row_num
from @table1
【问题讨论】:
标签: sql sql-server tsql datetime gaps-and-islands