聚合SQL表中的连续行

我正在尝试在下面的SQL表上运行聚合函数,以汇总由“长+纬度”分组的所有“ LengthOfRecord”,以及仅连续的行(即,处于运行顺序的“ RowNumber”)。

+-----------+-----------+---------------+----------------+
| RowNumber | Vessel ID |   Long+Lat    | LengthOfRecord |
+-----------+-----------+---------------+----------------+
| 102313179 | Vessel 01 | 123.751 1.196 |            181 |
| 102313180 | Vessel 01 | 123.751 1.196 |            179 |
| 102313181 | Vessel 01 | 123.751 1.196 |            361 |
| 102313182 | Vessel 01 | 123.751 1.196 |            359 |
| 102313183 | Vessel 01 | 123.751 1.196 |            180 |
| 102313184 | Vessel 01 | 123.751 1.196 |            181 |
| 102313185 | Vessel 01 | 123.751 1.196 |            179 |
| 102313186 | Vessel 01 | 123.751 1.196 |            180 |
| 102313187 | Vessel 01 | 123.751 1.196 |            360 |
| 102313188 | Vessel 01 | 123.751 1.196 |            360 |
| 102313189 | Vessel 01 | 123.751 1.196 |            180 |
| 102313191 | Vessel 01 | 123.751 1.196 |            181 |
| 102313298 | Vessel 01 | 123.750 1.197 |            180 |
| 102313375 | Vessel 01 | 123.742 1.196 |            179 |
| 102313376 | Vessel 01 | 123.742 1.196 |            359 |
| 102313377 | Vessel 01 | 123.742 1.196 |            180 |
| 102313379 | Vessel 01 | 123.742 1.196 |            181 |
| 102313380 | Vessel 01 | 123.742 1.196 |            178 |
+-----------+-----------+---------------+----------------+

以下是我试图通过SQL语句实现的结果。无论如何,我可以通过SQL查询来做到这一点吗?

+-----------+---------------+----------------+
| Vessel ID |   Long+Lat    | LengthOfRecord |
+-----------+---------------+----------------+
| Vessel 01 | 123.751 1.196 |           2881 |
| Vessel 01 | 123.750 1.197 |            180 |
| Vessel 01 | 123.742 1.196 |           1077 |
+-----------+---------------+----------------+
戈登·利诺夫(Gordon Linoff)

您可以使用行数差异方法来执行此操作:

select vesselId, latLong, sum(lengthOfRecord)
from (select t.*,
             row_number() over (partition by vesselId order by rowNumber) as seqnum,
             row_number() over (partition by vesselId, latlong order by rowNumber) as seqnum_latlong
      from table t
     ) t
group by (seqnum  - seqnum_latlong), latLong, vesselId;

行号方法的区别很难解释。它标识具有相同值的相邻行。如果运行子查询,您将看到计算的工作方式。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

聚合SQL表中的连续行

来自分类Dev

聚合连续的行

来自分类Dev

基于表中维度的SQL聚合

来自分类Dev

SQL Server:使用聚合运算符COUNT()时,打印左表中的所有行

来自分类Dev

计算SQL Server中的先前连续行

来自分类Dev

按表中的日期聚合表值 [SQL]

来自分类Dev

SQL Server 2012中的动态数据透视表中的聚合

来自分类Dev

在SQL中的同一表中找到两个连续行之间的时间差

来自分类Dev

使用数据表连接 R 中的连续行

来自分类Dev

从SQL表中查找不连续性

来自分类Dev

从表SQL中的数字开始连续更新值

来自分类Dev

SQL查询删除表中的连续重复项

来自分类Dev

SQL在一个列中聚合多个值,然后在数据透视表中聚合

来自分类Dev

使用Oracle在SQL中跨多个表进行聚合

来自分类Dev

sql server,表中许多列上的聚合(计数)

来自分类Dev

在 R 中聚合连续时间记录

来自分类Dev

SQL / Teradata:返回记录,其中连续行中的值相同

来自分类Dev

SQL-在聚合中包含不存在的行

来自分类Dev

SQL:从视图中的聚合函数选取的行中获取列

来自分类Dev

Scala 中的行聚合

来自分类Dev

SQL中的连续转换

来自分类Dev

如何确定 SQL Server“寻找岛屿”中的连续日期计数/天数(连续行)

来自分类Dev

一种在一行中组合聚合和非聚合值的SQL查询

来自分类Dev

一种在一行中组合聚合值和非聚合值的SQL查询

来自分类Dev

数据连续插入表中

来自分类Dev

数据连续插入表中

来自分类Dev

SQL Server:连续行问题

来自分类Dev

sql排名仅连续行

来自分类Dev

SQL Oracle:合并连续的行