Google电子表格查询:如何获取每个组的第一条记录?

时间:2014-10-28 12:32:45

标签: google-sheets

示例数据库:[存储为Google电子表格]

  
      
  • 时间戳======= | =联系人否= | =比尔======= |
  •   
  • =============== | =========== | == - ====== |
  •   
  • 11/7/2014 2:46:29 | 9332261982 | 13.0305472 |
  •   
  • 15/6/2014 2:46:29 | 9332261982 | 14.0305472 |
  •   
  • 22/5/2014 2:46:29 | 9332261982 | 16.0305472 |
  •   
  • 11/4/2014 2:46:29 | 9332261982 | 20.0305472 |
  •   
  • 15/7/2014 2:46:29 | 9916901970 | 13.0305472 |
  •   
  • 1/6/2014 2:46:29 | 9916901970 | 14.0305472 |
  •   
  • 12/5/2014 2:46:29 | 9916901970 | 16.0305472 |
  •   
  • 20/4/2014 2:46:29 | 9916901970 | 20.0305472 |
  •   

我需要:

  
      
  • 时间戳======= | =联系人否= | =比尔======= |
  •   
  • =============== | =========== | =========== |
  •   
  • 11/7/2014 2:46:29 | 9332261982 | 13.0305472 |
  •   
  • 15/7/2014 2:46:29 | 9916901970 | 13.0305472 |
  •   

所以我在Google电子表格中有3列时间戳(列 - A),联系号码(列 - B)和账单金额(列 - C)。 我需要一个大查询(或我可以与Google电子表格一起使用的查询),如果我在查询中传递该联系人,可以通过时间戳获取每个联系人的最新账单金额(作为where子句 - 如在哪里B包含XXX或B包含YYY)。

到目前为止,通过检查其他Stack溢出链接和Google搜索,我得出了类似的结果:

select * where B contains 9332261982 order by A DESC LIMIT 1 OFFSET 0

select A,B,C where B contains 9332261982 or B contains 9916901970 order by A DESC

那么如何解决这个问题并获得我想要的查询?

1 个答案:

答案 0 :(得分:1)

在BigQuery中我会做类似的事情:

Select A,B,C FROM
(Select * 
, Row_Number() Over(Partition By B Order by A Desc) as RNB
From yourtable)
Where RNB=1

另一种选择(如果你没有窗口功能)会使用一些字符串操作和最大值

  1. 通过将日期列与值列(A_C)连接来创建列D,这样您就可以得到类似于:2014-10-29 23:15:2__000012345(注意0填充,因此生成的字符串将是相同长度)
  2. 从......
  3. 运行选择B,MAX(D)E的简单聚合
  4. 将新E列子串。
  5. 希望这有帮助