Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.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_Sql Server - Fatal编程技术网

SQL Server间隔数

SQL Server间隔数,sql,sql-server,Sql,Sql Server,我有一个非常简单的表,有三列和下一个数据: +------+---------+---------+ | Cod | Value | status | +------+---------+---------+ | 1 | 1 | 1 | | 1 | 2 | 1 | | 1 | 3 | 1 | | 1 | 4 | 0 | | 1 | 5 | 0

我有一个非常简单的表,有三列和下一个数据:

+------+---------+---------+
| Cod  |  Value  |  status |
+------+---------+---------+
| 1    |  1      |  1      |
| 1    |  2      |  1      |
| 1    |  3      |  1      |
| 1    |  4      |  0      |
| 1    |  5      |  0      |
| 1    |  6      |  1      |
| 1    |  7      |  1      |
+------+---------+---------+
我需要得到每个代码的连续数字间隔。我寻求的结果是:

+------+----------------+----------------+---------+
| cod  |  min_val_intv  |  max_val_intv  |  status |
+------+----------------+----------------+---------+
| 1    |  4             |  5             |  0      |
| 1    |  1             |  3             |  1      |
| 1    |  6             |  7             |  1      |
+------+----------------+----------------+---------+
我的问题不是得到那个结果。我已尝试使用函数min、max和group by:

SELECT cod, MIN(Value) AS min_val_intv, MAX(Value) AS max_val_intv, status
FROM test_table
GROUP BY status, cod
有人可以帮我

注意。

尝试以下查询:

with tab1 as
(select table1.*,
 ROW_NUMBER() OVER(ORDER BY (SELECT 1)) -
 ROW_NUMBER() OVER(PARTITION BY status order by Cod) rn1,
 ROW_NUMBER() OVER(ORDER BY (SELECT 1)) -
 ROW_NUMBER() OVER(order by value) rn2
from table1)
select cod,min(value) min_val,max(value) max_val,status 
from tab1
group by cod,status,rn1,rn2;

有了Hamidreza的良好推荐,我几乎达到了目标,我将查询放在能够查看的位置:

查询:

with tab1 as 
选择表1.*,按Cod超额订购的行号- 按状态顺序按cod超额分配的行数,值rn 来自表1

按cod、status、rn从tab1组中选择cod、minvalue min_val、max value max_val、status

结果几乎是完美的,但因为我重新定位了记录,如果改变位置,如下面的链接所示。结果不太正确

有人想解决这个问题吗


注意。

由于状态与1相同,因此您将获得该结果,并按thatHamidreza进行分组,我从您的查询中发现了一个错误,我传递url以便您可以验证,您好,我再次尝试新的查询。但不能正常工作,因为实际间隔为6-7和25-26时,间隔重叠6-26。幸运的是,我无法打开SQL FIDLE,它似乎出现了问题。嗨,Hamidreza,我尝试打开SQL FIDLE,现在它工作了。你能复习一下这个问题吗?