Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/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查询以查找基于日期的数据的本地最大值、最小值_Sql_Sql Server_Sql Server 2008_Tsql - Fatal编程技术网

SQL查询以查找基于日期的数据的本地最大值、最小值

SQL查询以查找基于日期的数据的本地最大值、最小值,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,我有以下数据集 Date Category 2014-01-01 A 2014-01-02 A 2014-01-03 A 2014-01-04 B 2014-01-05 B ... 2014-01-10 B 2014-01-11 A ... 2014-01-20 A 我想要实现的结果是找到A和B的本地最小/最大日期,如下所示: MinDate MaxDate

我有以下数据集

Date         Category  
2014-01-01     A  
2014-01-02     A  
2014-01-03     A  
2014-01-04     B  
2014-01-05     B  
...  
2014-01-10     B  
2014-01-11     A  
...  
2014-01-20     A  
我想要实现的结果是找到A和B的本地最小/最大日期,如下所示:

MinDate       MaxDate       Category  
2014-01-01    2014-01-03       A  
2014-01-04    2014-01-10       B  
2014-01-11    2014-01-20       A  
注:使用

Select min(date), max(date), category from TABLE Group by category  
将创建结果

MinDate MaxDate Category  
2014-01-01 2014-01-20 A  
2014-01-04 2014-01-10 B  

这不是我想要实现的

假设您有一个支持窗口功能的DBMS,您可以这样做:

select category, grp, min(date) as min_date, max(date) as max_date
from (
    select category, date
         , row_number() over (order by date) 
         - row_number() over (partition by category order by date) as grp
    from T
) as X
group by category, grp
order by min(date)

其思想是根据日期对所有行进行排序,并根据日期对每个类别中的所有行进行排序。如果这些数字之间的差异发生变化,则表示一个类别的连续事件链被另一个类别打破。

您使用的是什么dbms?只有两个类别,但有三个结果。你是说每个连续(按日期)类别一次吗?没错,我在我的问题中添加了一个注释+1一些额外的解释:
行数()之间的差异
在下一行从A切换到B时增加。当两行具有相同的类别时,差异保持不变。@Lennart我从10mn开始阅读查询,直到您添加此解释,我才理解。那太聪明了!Lennart,非常感谢您的快速响应,代码返回了我想要的确切结果。非常感谢你!Lennart,我想给每个组(类别)分配一些ID,但不知道如何分配。这是通过代码中的grp列实现的。才华横溢:-)!