Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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 如何在SQL Server中设置值计数大于10的条件_Sql Server_Count - Fatal编程技术网

Sql server 如何在SQL Server中设置值计数大于10的条件

Sql server 如何在SQL Server中设置值计数大于10的条件,sql-server,count,Sql Server,Count,我在筛选数据库时遇到问题。。这是我的表结构(不是所有也由SQL命令过滤的值): 样本数据: VehicleID PositionDate SpeedReport LT130 2012-02-14 10:00:42.000 Moving LT130 2012-02-14 10:01:42.000 Idle LT130 2012-02-14 10:02:42.000 Moving L

我在筛选数据库时遇到问题。。这是我的表结构(不是所有也由SQL命令过滤的值):

样本数据:

VehicleID   PositionDate                SpeedReport 
  LT130      2012-02-14 10:00:42.000      Moving 
  LT130      2012-02-14 10:01:42.000      Idle 
  LT130      2012-02-14 10:02:42.000      Moving 
  LT130      2012-02-14 10:03:42.000      Idle 
  LT130      2012-02-14 10:04:42.000      Idle 
  LT130      2012-02-14 10:05:42.000      Idle
  LT130      2012-02-14 10:06:42.000      Idle
  LT130      2012-02-14 10:07:41.000      Idle
  LT130      2012-02-14 10:08:41.000      Idle
  LT130      2012-02-14 10:09:41.000      Idle
  LT130      2012-02-14 10:10:41.000      Idle
  LT130      2012-02-14 10:11:41.000      Idle
  LT130      2012-02-14 10:12:41.000      Idle
  LT130      2012-02-14 10:13:40.000      Idle
  LT130      2012-02-14 10:14:40.000      Idle
  LT130      2012-02-14 10:15:40.000      Idle
  LT130      2012-02-14 10:16:40.000      Idle
  LT130      2012-02-14 10:17:40.000      Idle
  LT130      2012-02-14 10:18:40.000      Idle
  LT130      2012-02-14 10:19:39.000      Idle
  LT130      2012-02-14 10:20:39.000      Idle
  LT130      2012-02-14 10:21:39.000      Idle
  LT130      2012-02-14 10:22:39.000      Idle
  LT130      2012-02-14 10:23:39.000      Idle
  LT130      2012-02-14 10:24:39.000      Idle
  LT130      2012-02-14 10:25:38.000      Idle
  LT130      2012-02-14 10:26:38.000      Idle
  LT130      2012-02-14 10:27:38.000      Idle
  LT130      2012-02-14 10:28:38.000      Idle
  LT130      2012-02-14 10:29:38.000      Moving
现在我想返回以满足条件=
count()>10
的“Idle”值开始和结束的行,但是
Idle
值也必须在连续行中,而不是在“Moving”值或其他任何值之间。。我的期望输出:

VehicleID  PositionDate               SpeedReport
   LT130    2012-02-14 10:03:42.000     Idle
   LT130    2012-02-14 10:28:38.000     Idle 

很抱歉表格太长,我尝试使用
count(*)>10
,但没有给出我想要的输出。我希望任何人都能帮助我,我会感谢你的帮助,谢谢。

我在谷歌上搜索了使用排名函数对连续的行进行分组,并找到了。以下是您的场景代码:

;WITH groups AS 
(
SELECT VehicleID 
    , SpeedReport
    , PositionDate
    , row_number() OVER(ORDER BY PositionDate) 
       - row_number() OVER(PARTITION BY SpeedReport ORDER BY SpeedReport, PositionDate)
       AS groupid
FROM [PositionData820901-D]
WHERE vehicleID = 'LT130' 
   AND PositionDate between '20120214 00:00:00.000' AND '20120215 00:00:00.000' 
   AND Speedreport IN ('Idle', 'Moving')
)

SELECT VehicleID, SpeedReport, MIN(PositionDate) AS PositionDate
FROM groups
GROUP BY VehicleID, SpeedReport, groupid
HAVING COUNT(1) > 10
UNION
SELECT VehicleID, SpeedReport, MAX(PositionDate) AS PositionDate
FROM groups
GROUP BY VehicleID, SpeedReport, groupid
HAVING COUNT(1) > 10
ORDER BY PositionDate

我在谷歌上搜索了使用排名函数对连续行进行分组,找到了。以下是您的场景代码:

;WITH groups AS 
(
SELECT VehicleID 
    , SpeedReport
    , PositionDate
    , row_number() OVER(ORDER BY PositionDate) 
       - row_number() OVER(PARTITION BY SpeedReport ORDER BY SpeedReport, PositionDate)
       AS groupid
FROM [PositionData820901-D]
WHERE vehicleID = 'LT130' 
   AND PositionDate between '20120214 00:00:00.000' AND '20120215 00:00:00.000' 
   AND Speedreport IN ('Idle', 'Moving')
)

SELECT VehicleID, SpeedReport, MIN(PositionDate) AS PositionDate
FROM groups
GROUP BY VehicleID, SpeedReport, groupid
HAVING COUNT(1) > 10
UNION
SELECT VehicleID, SpeedReport, MAX(PositionDate) AS PositionDate
FROM groups
GROUP BY VehicleID, SpeedReport, groupid
HAVING COUNT(1) > 10
ORDER BY PositionDate

你需要的比计数更具体。您需要条纹,即连续记录的计数。我最近回答了另一个streak问题----还有很多其他问题。欢迎使用StackOverflow:如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码示例”按钮(
{}
),以很好地格式化和语法突出显示它!正式注明marc_s。。约翰·皮克:我尝试了你的代码,但我的SpeedReport列不是int数据类型。如何将其更改为varchar数据类型?您需要的比计数更具体。您需要条纹,即连续记录的计数。我最近回答了另一个streak问题----还有很多其他问题。欢迎使用StackOverflow:如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码示例”按钮(
{}
),以很好地格式化和语法突出显示它!正式注明marc_s。。约翰·皮克:我尝试了你的代码,但我的SpeedReport列不是int数据类型。如何将其更改为varchar数据类型?谢谢您的帮助@Diego。不知何故,我的查询Explus给了我一个错误-“ROW_NUMBER”不是一个可识别的函数名:(哦,对此我很抱歉。它在SQL Server 2005和更高版本以及其他DBMS中工作。如果我有时间,我会发布另一种方法。哦,我明白了。是的,我正在使用SQL Server 2000。无论如何,感谢@diego的帮助,我期待着你的其他解决方案。感谢@diego的帮助。不知何故,我的查询解释给我错误-“行数”不是一个记录gnized function name.:(哦,对此我很抱歉。它在SQL Server 2005和更高版本以及其他DBMS中工作。如果有时间,我将发布另一种方法来完成它。哦,我明白了。是的,我正在使用SQL Server 2000。。无论如何,感谢@diego的帮助,我期待您的其他解决方案。