Sql 不选择最下面一行

Sql 不选择最下面一行,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,我有这个,为什么要到最后一排才算?我希望输出到最后一行。它计算状态的间隔=0 我试过这个: SELECT MIN ([main].[Start]) AS [STOP_Begin], [main].[End] AS [STOP_End], DATEDIFF(s, MIN([main].[Start]), [main].[End]) AS [Interval_Second] FROM ( SELECT [sub].[Start], MIN([sub].[End])

我有这个,为什么要到最后一排才算?我希望输出到最后一行。它计算状态的间隔=0

我试过这个:

SELECT
  MIN ([main].[Start]) AS [STOP_Begin],
  [main].[End] AS [STOP_End],
  DATEDIFF(s, MIN([main].[Start]), [main].[End]) AS [Interval_Second]
FROM
(
  SELECT
    [sub].[Start],
    MIN([sub].[End]) AS [End]
  FROM
  (
    SELECT
      [start].[Timestamp] AS [Start],
      [start].[Status] AS [StartingStatus],
      [end].[Timestamp] AS [End],
      [end].[Status] AS [EndingStatus]
    FROM [Alerts] [start],  [Alerts] [end]
    WHERE [start].[Status] = 0
      AND [start].[Timestamp] < [end].[Timestamp]
      AND [start].[Status] <> [end].[Status]
  ) AS [sub]
  GROUP BY
    [sub].[Start],
    [sub].[StartingStatus]
) AS [main]
GROUP BY
  [main].[End]
它给出了输出: 我希望输出计数到最后一行,如果0是最后一行,它给我的间隔=NULL,我的问题是,它不计数到最后一行,其中有0

我期望的结果是:


这是您的查询,我已将其添加到您的底部的SQL FIDLE中

SELECT
  MIN ([main].[Start]) AS [STOP_Begin],
  [main].[End] AS [STOP_End],
  DATEDIFF(s, MIN([main].[Start]), [main].[End]) AS [Interval_Second]
FROM
(
  SELECT
    [starts].[Start],
    MIN([ends].[Timestamp]) AS [End]
  FROM
  (
    SELECT
      [Timestamp] AS [Start]
    FROM [Alerts]
    WHERE [Status] = 0
  ) AS [starts] LEFT JOIN [Alerts] AS [ends]
  ON  [starts].[Start] < [ends].[Timestamp]
  AND [ends].[Status] <> 0
  GROUP BY
    [starts].[Start]
) AS [main]
GROUP BY
  [main].[End]
ORDER BY 1

这是您的查询,我已将其添加到您的底部的SQL FIDLE中

SELECT
  MIN ([main].[Start]) AS [STOP_Begin],
  [main].[End] AS [STOP_End],
  DATEDIFF(s, MIN([main].[Start]), [main].[End]) AS [Interval_Second]
FROM
(
  SELECT
    [starts].[Start],
    MIN([ends].[Timestamp]) AS [End]
  FROM
  (
    SELECT
      [Timestamp] AS [Start]
    FROM [Alerts]
    WHERE [Status] = 0
  ) AS [starts] LEFT JOIN [Alerts] AS [ends]
  ON  [starts].[Start] < [ends].[Timestamp]
  AND [ends].[Status] <> 0
  GROUP BY
    [starts].[Start]
) AS [main]
GROUP BY
  [main].[End]
ORDER BY 1


您想做什么?状态为0的最后一行,它不会给出结果其间隔的计数,如果最后一行为0,我希望间隔输出=NULL@KenWhite,请再次查看+1。好多了,好多了。谢谢-您想做什么?状态为0的最后一行,它不会给出结果其间隔的计数,如果最后一行为0,我希望间隔输出=NULL@KenWhite,请再次查看+1。好多了,好多了。谢谢-你想要什么?您能提供所需的结果吗?请再次查看我的帖子,如果我将其更改为MAX,它会给我错误的结果,因为我希望第二行从00:00:40开始计数状态=0,并给我间隔=NULL,因为这是最后一个状态=0您可以按照您向我们展示的方式发布所需的输出吗?请再次查看我的帖子,我已经更改了它,不确定您是否收到有关答案更新的通知。给你,最新答案,你想要什么?您能提供所需的结果吗?请再次查看我的帖子,如果我将其更改为MAX,它会给我错误的结果,因为我希望第二行从00:00:40开始计数状态=0,并给我间隔=NULL,因为这是最后一个状态=0您可以按照您向我们展示的方式发布所需的输出吗?请再次查看我的帖子,我已经更改了它,不确定您是否收到有关答案更新的通知。给你,最新答案
SELECT
  MIN ([main].[Start]) AS [STOP_Begin],
  [main].[End] AS [STOP_End],
  DATEDIFF(s, MIN([main].[Start]), [main].[End]) AS [Interval_Second]
FROM
(
  SELECT
    [starts].[Start],
    MIN([ends].[Timestamp]) AS [End]
  FROM
  (
    SELECT
      [Timestamp] AS [Start]
    FROM [Alerts]
    WHERE [Status] = 0
  ) AS [starts] LEFT JOIN [Alerts] AS [ends]
  ON  [starts].[Start] < [ends].[Timestamp]
  AND [ends].[Status] <> 0
  GROUP BY
    [starts].[Start]
) AS [main]
GROUP BY
  [main].[End]
ORDER BY 1