Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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:按连续记录分组第2部分_Sql_Sql Server_Grouping - Fatal编程技术网

SQL:按连续记录分组第2部分

SQL:按连续记录分组第2部分,sql,sql-server,grouping,Sql,Sql Server,Grouping,问题1 下表显示了每隔1小时一个人的位置 Id EntityID EntityName LocationID Timex delta 1 1 Mickey Club house 0300 1 2 1 Mickey Club house 0400 1 3 1 Mickey Park 050

问题1

下表显示了每隔1小时一个人的位置

Id EntityID EntityName LocationID Timex delta 1 1 Mickey Club house 0300 1 2 1 Mickey Club house 0400 1 3 1 Mickey Park 0500 2 4 1 Mickey Minnies Boutique 0600 3 5 1 Mickey Minnies Boutique 0700 3 6 1 Mickey Club house 0800 4 7 1 Mickey Club house 0900 4 8 1 Mickey Park 1000 5 9 1 Mickey Club house 1100 6 Id EntityID EntityName LocationID Timex Delta 1 1 Mickey Club house 0900 1 2 1 Mickey Club house 1000 1 3 1 Mickey Park 1100 2 4 2 Donald Club house 0900 1 5 2 Donald Park 1000 2 6 2 Donald Park 1100 2 7 3 Goofy Park 0900 1 8 3 Goofy Club house 1000 2 9 3 Goofy Park 1100 3 Id EntityID EntityName位置Id Timex增量 1米老鼠俱乐部大厦03001 2 1米奇俱乐部大厦0400 1 米老鼠公园3 1 0500 2 4 1米奇米尼精品店0600 3 5 1米奇米尼精品店0700 3 6 1米奇俱乐部大厦0800 4 7 1米奇俱乐部大厦0900 4 8 1米奇公园1000 5 9 1米奇俱乐部大厦1100 6 每次位置更改时,增量将增加+1。 我想返回一个按delta分组的聚合,如下例所示

EntityName LocationID StartTime EndTime Mickey Club house 0300 0500 Mickey Park 0500 0600 Mickey Minnies Boutique 0600 0800 Mickey Club house 0800 1000 Mickey Park 1000 1100 Mickey Club house 1100 1200 EntityName LocationID StartTime EndTime 米奇俱乐部大厦03000500 米奇公园05000600 米奇米尼精品店0600 0800 米奇俱乐部大厦0800 1000 米奇公园1000 1100 米奇俱乐部之家1100 1200 我正在使用下面的查询,它是从这里获取和改编的 (效果很好):

选择
最小值(timex)作为开始日期
,结束日期
,entityid
,entityname
,位置ID
希腊字母表的第4个字母
从…起
(
选择
s1.timex
,(  
选择
最大值(timex)
从…起
[locationreport2]s2
哪里
s2.entityid=s1.entityid
s2.delta=s1.delta
而且不存在
(
选择
无效的
从…起
[dbo].[locationreport2]s3
哪里
s3.timexs1.timex
和s3.entityid s1.entityid
和s3.entityname s1.entityname
和s3.delta s1.delta
)
)截止日期
,s1.entityid
,s1.entityname
,s1.locationid
,s1.delta
从…起
[dbo].[locationreport2]s1
)结果
分组
结束日期
,entityid
,entityname
,位置ID
希腊字母表的第4个字母
订购人
1 asc
但是我不想使用增量(计算和填充它需要努力);相反,我想知道是否有任何方法可以在运行查询时将其作为一部分进行计算。

我也不介意使用视图

问题2

下表以1小时为间隔显示了不同人员的位置

Id EntityID EntityName LocationID Timex delta 1 1 Mickey Club house 0300 1 2 1 Mickey Club house 0400 1 3 1 Mickey Park 0500 2 4 1 Mickey Minnies Boutique 0600 3 5 1 Mickey Minnies Boutique 0700 3 6 1 Mickey Club house 0800 4 7 1 Mickey Club house 0900 4 8 1 Mickey Park 1000 5 9 1 Mickey Club house 1100 6 Id EntityID EntityName LocationID Timex Delta 1 1 Mickey Club house 0900 1 2 1 Mickey Club house 1000 1 3 1 Mickey Park 1100 2 4 2 Donald Club house 0900 1 5 2 Donald Park 1000 2 6 2 Donald Park 1100 2 7 3 Goofy Park 0900 1 8 3 Goofy Club house 1000 2 9 3 Goofy Park 1100 3 Id EntityID EntityName位置Id Timex增量 1米老鼠俱乐部大厦0900 1 2 1米奇俱乐部大厦1000 1 3米老鼠公园1100 2 4.2唐纳德俱乐部大厦0900 1 5 2唐纳德公园1000 2 唐纳德公园6 2 1100 2 7 3高飞公园0900 1 8 3高飞俱乐部大厦1000 2 9 3高飞公园1100 3 我想返回按人员和位置分组的聚合。 比如说

EntityID EntityName LocationID StartTime EndTime 1 Mickey Club house 0900 1100 1 Mickey Park 1100 1200 2 Donald Club house 0900 1000 2 Donald Park 1000 1200 3 Goofy Park 0900 1000 3 Goofy Club house 1000 1100 3 Goofy Park 1100 1200 EntityID EntityName LocationID StartTime EndTime 米奇俱乐部大厦1号0900 1100 1米奇公园1100 1200 唐纳德俱乐部2号0900 1000 2唐纳德公园1000 1200 3高飞公园0900 1000 3高飞会所1000 1100 高飞公园3号1100 1200
我需要对上述查询(问题1)进行哪些修改?

听起来像是分析函数的例子。您需要在EndTime中添加1小时,但这取决于数据类型

SELECT EntityName, LocationID, StartTime, EndTime
  FROM ( SELECT EntityName, LocationID
           ,MIN(Timex) OVER (PARTITION BY EntityID, delta ORDER BY delta) AS StartTime
           ,MAX(Timex) OVER (PARTITION BY EntityID, delta ORDER BY delta) AS EndTime
       FROM locationreport2
    ) x
  GROUP BY EntityName, LocationID, StartTime, EndTime
  ORDER BY EntityName, StartTime

您使用的是哪个版本的SQL Server?