Sql 在Google Big Query中获取组中的第一个和最后一个记录

Sql 在Google Big Query中获取组中的第一个和最后一个记录,sql,google-bigquery,Sql,Google Bigquery,我有一组由Id1和Id2订购的Gps点。对于每个组,我必须获得输出中显示的第一个和最后一个记录 我试着根据Id1和Id2对它进行分区,然后根据时间按asc和desc顺序对它进行排序,得到它们的第一个和最后一个记录,但是我没有得到想要的结果。我不知道我会错在哪里 Id1 Id2 STime ETime Latitude Longitude 11 112 2016-11-23 12:15:41 2016-11

我有一组由Id1和Id2订购的Gps点。对于每个组,我必须获得输出中显示的第一个和最后一个记录

我试着根据Id1和Id2对它进行分区,然后根据时间按asc和desc顺序对它进行排序,得到它们的第一个和最后一个记录,但是我没有得到想要的结果。我不知道我会错在哪里

    Id1 Id2 STime                 ETime                 Latitude    Longitude
    11  112 2016-11-23 12:15:41   2016-11-23 12:17:20   26.1258755  -80.1347351      
    11  112 2016-11-23 12:15:41     2016-11-23 12:17:20     26.1258755  -80.1347351      
    11  112 2016-11-23 12:15:41     2016-11-23 12:17:20     26.1258488  -80.13432    
    11  112 2016-11-23 12:15:41     2016-11-23 12:17:20     26.1261063  -80.13432    
    11  112 2016-11-23 12:15:41     2016-11-23 12:17:20     26.1261559  -80.13432
    11  113 2016-11-23 12:24:13     2016-11-23 12:48:16     26.12608    -80.13691    
    11  113 2016-11-23 12:24:13     2016-11-23 12:48:16     26.12608    -80.13691    
    11  113 2016-11-23 12:24:13     2016-11-23 12:48:16     26.1261559  -80.13696    
    11  113 2016-11-23 12:24:13     2016-11-23 12:48:16     26.1261559  -80.13696    
    11  113 2016-11-23 12:24:13     2016-11-23 12:48:16     26.1261063  -80.13696


    Id1 Id2 STime                 ETime                 Latitude    Longitude
    11  112 2016-11-23 12:15:41   2016-11-23 12:17:20   26.1258755  -80.1347351      
    11  112 2016-11-23 12:15:41     2016-11-23 12:17:20     26.1261559  -80.13432
    11  113 2016-11-23 12:24:13     2016-11-23 12:48:16     26.12608    -80.13691    
    11  113 2016-11-23 12:24:13     2016-11-23 12:48:16     26.1261063  -80.13696
当前查询:

    SELECT
      A.Id1 ,
      A.Id2,
      STime,
      ETime,
      Latitude,
      Longitude
    FROM
      M.A AS A
    JOIN
      L.B AS B
    ON
      A.STime < B.DateTime
      AND A.ETime >= B.DateTime
      AND A.ID1 = B.Id1
    WHERE
      (A._PARTITIONTIME BETWEEN TIMESTAMP('2016-11-23')
        AND TIMESTAMP('2016-11-23')
        AND A.Id1 IN (550315976))
    ORDER BY
      B.Id1,
      A.Id1,
    B.DateTime 
选择
A.Id1,
A.Id2,
史提姆,
时间,
纬度,
经度
从…起
文学硕士
参加
L.B.作为B
在…上
A.时间=B.DateTime
A.ID1=B.ID1
哪里
(A._时间戳之间的分割时间('2016-11-23')
和时间戳(“2016-11-23”)
和A.Id1 IN(550315976))
订购人
B.Id1,
A.Id1,
日期时间

这可能有助于澄清是什么定义了一个组。在您的查询中,您只加入
Id1
,而不是
Id2
,因此
A
B
的值是相同的
Id1
值,但可能不同的
Id2
值。请阅读询问的最佳实践:如何显示您遇到问题的代码,以及。具体来说,我建议您添加两个表的
示例
,并澄清第一条和最后一条记录的含义,这可能有助于澄清组的定义。在您的查询中,您只加入
Id1
,而不是
Id2
,因此
A
B
的值是相同的
Id1
值,但可能不同的
Id2
值。请阅读询问的最佳实践:如何显示您遇到问题的代码,以及。具体来说,我建议您添加两个表的
示例
,并澄清第一条和最后一条记录的
含义