Sql server 用于隔离数据的SQL查询

Sql server 用于隔离数据的SQL查询,sql-server,spotfire,Sql Server,Spotfire,我的数据集如下:T表示运输移动,F表示运输静止 我希望数据分类如下,以便进一步分析。需要基于列Moving导出类,并且应从0开始计数,当移动值从T变为F时,再从F从0重新计数。下一列ID是将移动设置值从0分组到增量级别 输出: 您可以使用通用表表达式来实现您的目标: 首先,您必须按移动日期对数据进行排序,您可以使用ROW_NUMBER: 下面是一个示例请求: ;WITH orderedMovements AS ( SELECT [Date], [Moving], ROW_NUMBER()

我的数据集如下:
T
表示运输移动,
F
表示运输静止

我希望数据分类如下,以便进一步分析。需要基于列
Moving
导出
,并且应从
0
开始计数,当移动值从
T
变为
F
时,再从
F
0
重新计数。下一列
ID
是将移动设置值从
0
分组到增量级别

输出:


您可以使用通用表表达式来实现您的目标:

首先,您必须按移动日期对数据进行排序,您可以使用ROW_NUMBER:

下面是一个示例请求:

;WITH orderedMovements AS
(
    SELECT [Date], [Moving], ROW_NUMBER() OVER (PARTITION BY 1 ORDER BY [Date] ASC) AS [RowNum]
    FROM [dbo].[movements]
), completedMovements AS
(
    SELECT omo.[Date], omo.[Moving], 0 AS [Class], 0 AS [Id], omo.[RowNum] AS [RowNumBis]
    FROM orderedMovements omo
    WHERE [RowNum] = 1
    UNION ALL
    SELECT omo.[Date], omo.[Moving], IIF(cmo.[Moving] = omo.[Moving], cmo.[Class] + 1, 0) AS [Class], IIF(cmo.[Moving] = omo.[Moving], cmo.[Id], cmo.[Id] + 1) AS [Id], omo.[RowNum]
    FROM orderedMovements omo
            JOIN completedMovements cmo ON omo.[RowNum] = cmo.[RowNumBis] + 1
)
SELECT [Date], [Moving], [Class], [Id]
FROM completedMovements
OPTION (MAXRECURSION 100);

您可以使用通用表表达式来实现您的目标:

首先,您必须按移动日期对数据进行排序,您可以使用ROW_NUMBER:

下面是一个示例请求:

;WITH orderedMovements AS
(
    SELECT [Date], [Moving], ROW_NUMBER() OVER (PARTITION BY 1 ORDER BY [Date] ASC) AS [RowNum]
    FROM [dbo].[movements]
), completedMovements AS
(
    SELECT omo.[Date], omo.[Moving], 0 AS [Class], 0 AS [Id], omo.[RowNum] AS [RowNumBis]
    FROM orderedMovements omo
    WHERE [RowNum] = 1
    UNION ALL
    SELECT omo.[Date], omo.[Moving], IIF(cmo.[Moving] = omo.[Moving], cmo.[Class] + 1, 0) AS [Class], IIF(cmo.[Moving] = omo.[Moving], cmo.[Id], cmo.[Id] + 1) AS [Id], omo.[RowNum]
    FROM orderedMovements omo
            JOIN completedMovements cmo ON omo.[RowNum] = cmo.[RowNumBis] + 1
)
SELECT [Date], [Moving], [Class], [Id]
FROM completedMovements
OPTION (MAXRECURSION 100);

您是在使用SQL的DB中还是在使用计算列的Spotfire中尝试执行此操作?根据您的回答,我会调整您的标记,因为它们令人困惑。您是在SQL数据库中还是在Spotfire计算列中尝试这样做?根据你的回答,我会调整你的标签,因为它们令人困惑。