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
select语句中的SQL增量数_Sql_Sql Server_Dynamic Sql - Fatal编程技术网

select语句中的SQL增量数

select语句中的SQL增量数,sql,sql-server,dynamic-sql,Sql,Sql Server,Dynamic Sql,我有一个问题,当两列之间的差异大于或等于4时,我需要将一组值分组并增加组数,请参见下文 更新:我添加了一个日期列,以便您可以查看订单,但我需要根据差异而不是日期更新组 +--------+-------+-------+----------+--------------+ |日期|第1列|第2列|差异|组号| +--------+-------+-------+----------+--------------+ |6月1日| 2 | 1 | 1 | 1| |6月2日| 1 | 1 | 0 |

我有一个问题,当两列之间的差异大于或等于4时,我需要将一组值分组并增加组数,请参见下文

更新:我添加了一个日期列,以便您可以查看订单,但我需要根据差异而不是日期更新组

+--------+-------+-------+----------+--------------+
|日期|第1列|第2列|差异|组号|
+--------+-------+-------+----------+--------------+
|6月1日| 2 | 1 | 1 | 1|
|6月2日| 1 | 1 | 0 | 1|
|6月3日| 3 | 2 | 1 | 1|
|6月4日| 4 | 1 | 3 | 1|
|6月5日| 5 | 1 | 4 | 2|
|6-6月1日1日0日2|
|6月7日23日12日11日3|
|6月8日12日11日1日3|
|6月9日| 2 | 1 | 1 | 3|
|2014年6月10日13日4日9日4|
|2004年6月11日|

+--------+-------+-------+----------+--------------+

组号只是4或更多出现在
方差
列中的次数。您可以使用相关子查询获取此信息:

select t.*,
       (select 1 + count(*)
        from table t2
        where t2.date < t.date and t2.variance >= 4
       ) as GroupNumber
from table t;

您是否有要排序的ID字段?SQL server中的数据不是按本机顺序排列的…感谢您编辑我的代码,我实际上正在修复此问题,但是的,它是按日期排列的,但指示组的数字是差异什么版本的SQL server?这在SQLServer2012及更高版本中更容易实现,在早期版本中相当麻烦(搜索差距和孤岛,您就会明白我的意思)。如果您在客户端上以循环方式显示所有这些行,也许您也可以在循环期间应用此组号。谢谢!我将尝试一下,不幸的是,我们使用的是sql server 2008,但感谢您在2012年提出的建议
select t.*,
       sum(case when variance >= 4 then 1 else 0 end) over
            (order by date rows between unbounded preceding and 1 preceding
            ) as GroupNumber
from table t;