Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server查询上一行值所在的下一行值_Sql Server - Fatal编程技术网

Sql server SQL Server查询上一行值所在的下一行值

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之间,后跟一小时

此查询在一小时内为我提供了从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之间,后跟一小时内大于或等于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)
;