Sql server SQL Server查询上一行值所在的下一行值
此查询在一小时内为我提供了从1到20的事件值,如果连续事件值>=200,如何添加到该值Sql server SQL Server查询上一行值所在的下一行值,sql-server,Sql Server,此查询在一小时内为我提供了从1到20的事件值,如果连续事件值>=200,如何添加到该值 SELECT ID, count(Event) as numberoftimes FROM table_name WHERE Event >=1 and Event <=20 GROUP BY ID, DATEPART(HH, AtHour) HAVING DATEPART(HH, AtHour) <= 1 ORDER BY ID desc 我想选择事件值范围在1到20之间,后跟一小时
SELECT ID, count(Event) as numberoftimes
FROM table_name
WHERE Event >=1 and Event <=20
GROUP BY ID, DATEPART(HH, AtHour)
HAVING DATEPART(HH, AtHour) <= 1
ORDER BY ID desc
我想选择事件值范围在1到20之间,后跟一小时内大于或等于200的值的ID
预期结果应该是这样的:
+----+--------+
| ID | AtHour |
+----+--------+
| 1 | 11 |
| 1 | 13 |
| 2 | 11 |
| 2 | 14 |
| 3 | 09 |
| 3 | 12 |
+----+--------+
或者,对于唯一ID,它发生了多少次,而不是哪一个小时。
请原谅,我对帖子格式还很生疏 检查示例表。似乎不正确到目前为止你尝试了什么-请显示你当前的代码。你能将此嵌入到你的问题中吗;在您的表中,所有记录都具有相同的ID,那么您的表的主键是什么?不完全是,您的意思是ID是主键还是非主键?您是否尝试过我的示例?抱歉,我忘记了您问题的一小时内部分。你能再试一次吗?你能用示例数据设置一个rextester演示来说明这个问题吗?你创建的示例表按照我的要求运行,不确定我的问题出在哪里,huhShow一些有问题的数据!
CREATE TABLE data (Id INT, Event INT, AtHour SMALLDATETIME);
INSERT data (Id, Event, AtHour) VALUES
(1,1,'2017-03-16 11:00:00'),
(1,4,'2017-03-16 11:01:00'),
(1,1,'2017-03-16 11:02:00'),
(1,20,'2017-03-16 11:03:00'),
(1,200,'2017-03-16 11:04:00'),
(1,1,'2017-03-16 13:00:00'),
(1,1,'2017-03-16 13:05:00'),
(1,2,'2017-03-16 13:06:00'),
(1,500,'2017-03-16 13:07:00'),
(1,39,'2017-03-16 13:10:00')
;
; WITH temp as (
SELECT rownum = ROW_NUMBER() OVER (PARTITION BY id ORDER BY AtHour)
, *
FROM data
)
SELECT a.id, DATEPART(HOUR, a.AtHour) as AtHour, COUNT(*) AS NumOfPairs
FROM temp a JOIN temp b ON a.rownum = b.rownum-1
WHERE a.Event BETWEEN 1 and 20 AND b.Event >= 200
AND DATEDIFF(MINUTE, a.AtHour, b.AtHour) <= 60
GROUP BY a.id, DATEPART(HOUR, a.AtHour)
;
CREATE TABLE data (Id INT, Event INT, AtHour SMALLDATETIME);
INSERT data (Id, Event, AtHour) VALUES
(1,1,'2017-03-16 11:00:00'),
(1,4,'2017-03-16 11:01:00'),
(1,1,'2017-03-16 11:02:00'),
(1,20,'2017-03-16 11:03:00'),
(1,200,'2017-03-16 11:04:00'),
(1,1,'2017-03-16 13:00:00'),
(1,1,'2017-03-16 13:05:00'),
(1,2,'2017-03-16 13:06:00'),
(1,500,'2017-03-16 13:07:00'),
(1,39,'2017-03-16 13:10:00')
;
; WITH temp as (
SELECT rownum = ROW_NUMBER() OVER (PARTITION BY id ORDER BY AtHour)
, *
FROM data
)
SELECT a.id, DATEPART(HOUR, a.AtHour) as AtHour, COUNT(*) AS NumOfPairs
FROM temp a JOIN temp b ON a.rownum = b.rownum-1
WHERE a.Event BETWEEN 1 and 20 AND b.Event >= 200
AND DATEDIFF(MINUTE, a.AtHour, b.AtHour) <= 60
GROUP BY a.id, DATEPART(HOUR, a.AtHour)
;