【发布时间】:2015-04-05 07:57:28
【问题描述】:
问题 1
我有下表显示一个人每隔 1 小时的位置
Id EntityID EntityName LocationID Timex delta 1 1 米奇俱乐部 0300 1 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。 我想按照下面的示例返回按增量分组的聚合。
实体名称 LocationID 开始时间 结束时间 米奇俱乐部 0300 0500 米奇公园 0500 0600 米奇米妮精品店 0600 0800 米奇俱乐部 0800 1000 米奇公园 1000 1100 米奇俱乐部 1100 1200我正在使用从此处获取并改编的以下查询 SQL: Group By on Consecutive Records (效果很好):
select
min(timex) as start_date
,end_date
,entityid
,entityname
,locationid
,delta
from
(
select
s1.timex
,(
select
max(timex)
from
[locationreport2] s2
where
s2.entityid = s1.entityid
and s2.delta = s1.delta
and not exists
(
select
null
from
[dbo].[locationreport2] s3
where
s3.timex < s2.timex
and s3.timex > s1.timex
and s3.entityid <> s1.entityid
and s3.entityname <> s1.entityname
and s3.delta <> s1.delta
)
) as end_date
, s1.entityid
, s1.entityname
, s1.locationid
, s1.delta
from
[dbo].[locationreport2] s1
) Result
group by
end_date
, entityid
, entityname
, locationid
, delta
order by
1 asc
但是我不想使用增量(计算和填充它需要努力);相反,我想知道是否有任何方法可以在运行查询时将其计算为部分/。
我也不介意使用视图。
问题 2
我有下表,它以 1 小时的间隔显示不同人的位置
Id EntityID EntityName LocationID Timex Delta 1 1 米奇俱乐部 0900 1 2 1 米奇俱乐部 1000 1 3 1 米奇公园 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 米奇俱乐部 0900 1100 1 米奇公园 1100 1200 2 唐纳德会所 0900 1000 2 唐纳德公园 1000 1200 3 高飞公园 0900 1000 3 高飞会所 1000 1100 3 高飞公园 1100 1200我需要对上述查询进行哪些修改(问题 1)?
【问题讨论】:
-
您使用的是哪个版本的 SQL Server?
标签: sql sql-server grouping