Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.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 2012之间_Sql_Sql Server_Sql Server 2012_Row Number - Fatal编程技术网

行号()在SQL Server 2012之间

行号()在SQL Server 2012之间,sql,sql-server,sql-server-2012,row-number,Sql,Sql Server,Sql Server 2012,Row Number,我需要一些关于在SQL Server 2012中使用ROW_NUMBER()以及之间的的指导 我编写了以下代码: SELECT DISTINCT *, CASE WHEN (row_number() OVER BETWEEN (PARTITION BY LocationCode ORDER BY startdate ASC) AND EndDate) = 1 THEN 1

我需要一些关于在SQL Server 2012中使用
ROW_NUMBER()
以及
之间的
的指导

我编写了以下代码:

SELECT DISTINCT
    *,
    CASE WHEN (row_number() OVER BETWEEN (PARTITION BY LocationCode 
                                          ORDER BY startdate ASC) AND EndDate) = 1 
           THEN 1 ELSE 0 
    END AS Testr,
FROM 
    Table 
其目的是在MIN(startDate)和EndDate
之间用1或0标记位置代码

我该怎么做

我添加了一个表:这就是它现在的样子

LocationCode    StartDate   EndDate
10808247    20140617    20140701
10808247    20140618    20140701
10808247    20140618    20140701
10808247    20140617    20140701
10808247    20140709    20140801
目标

LocationCode    StartDate   EndDate   New
10808247    20140617    20140701            1
10808247    20140618    20140701            1
10808247    20140618    20140701            1
10808247    20140617    20140701            1
10808247    20140709    20140801            0

New
的最后一行为零,因为它不在
结束日期

之内,因此不需要
行编号()。您可以通过交叉应用
来实现这一点

基于示例数据,我假设这些字段的数据类型为
INT

Select  T.LocationCode, T.StartDate, T.EndDate,
        Case When T.StartDate > X.MinEndDate Then 0 Else 1 End As New
From    Table   T
Cross Apply
(
    Select  Min(T2.EndDate) MinEndDate
    From    Table   T2
    Where   T2.LocationCode = T.LocationCode
) X

或者,您可以执行简单的分组操作,并像下面这样连接回表:

SELECT T.LocationCode
      ,T.StartDate
      ,T.EndDate
      ,CASE 
         WHEN T.StartDate > t2.MinEndDate
            THEN 0
       ELSE 1
       END AS New
FROM test T
INNER JOIN (
    SELECT locationcode
           ,Min(EndDate) MinEndDate
    FROM test
    GROUP BY locationcode
    ) T2 ON T2.LocationCode = T.LocationCode;

为什么要使用
行号
执行此操作?我不确定还有什么其他方法可以解决我从今天早上开始一直在处理的问题。基本上,这就是我所需要做的。如何编码它,我发现它有点难。请包括例子。值通常总是大于或等于最小值,并且很难确定结束日期是什么。您将
min(startdate)
EndDate
与什么进行比较?如何将
LocationCode
日期进行比较?这是我正在努力解决的问题。