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,现在它工作了。你能复习一下这个问题吗?