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

时间:2016-12-13 17:24:17

标签: sql google-bigquery

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

我尝试基于Id1和Id2对其进行分区,然后在asc和desc顺序中根据STime对其进行排序并获取它们的第一个和最后一个记录,但是我没有得到所需的结果。不知道我哪里出错了。

    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 

0 个答案:

没有答案