【问题标题】:How to get the latest record on big query based on field date如何根据字段日期获取大查询的最新记录
【发布时间】:2020-12-21 00:49:09
【问题描述】:

这是我的查询

SELECT producto, ROUND(precio_medio,2) as precio, fecha, mpio, cod_dpto, tipo, presentacion FROM DATABASE where categoria="Arrendamiento de tierras" and tipo="Arrendamiento de tierras" and producto="Cabeza de ganado mensual para pastoreo, terreno inclinado/ondulado con agua" and presentacion ="Arriendo"

它返回 [id、producto、precio、fecha、mpio、cod_dpto、presentacion]

所以我只想获取基于字段 fecha 的 Popayan 和 Piendamo 的最新记录

【问题讨论】:

    标签: sql arrays google-bigquery where-clause greatest-n-per-group


    【解决方案1】:

    甚至“更简单”的版本(适用于 BigQuery 标准 SQL)

    #standardSQL
    SELECT 
        mpio,
        ARRAY_AGG(
            STRUCT(id, producto, precio, fecha, cod_dpto, presentacion)
            ORDER BY fecha DESC LIMIT 1
        )[OFFSET(0)].*
    FROM `project.dataset.table`  
    WHERE categoria="Arrendamiento de tierras" 
      AND tipo="Arrendamiento de tierras" 
      AND producto="Cabeza de ganado mensual para pastoreo, terreno inclinado/ondulado con agua" 
      AND presentacion ="Arriendo"
    GROUP BY mpio
      
    

    【讨论】:

      【解决方案2】:

      在 Big Query 中,您可以为此使用数组。假设您想要每个 mpio 中具有最新 fecha 的行:

      select * except(ar)
      from (  
          select 
              mpio,
              array_agg(
                  struct(id, producto, precio, mpio,cod_dpto, presentacion)
                  order by fecha desc limit 1
              ) ar
          from database
          where 
              categoria="Arrendamiento de tierras" 
              and tipo="Arrendamiento de tierras" 
              and producto="Cabeza de ganado mensual para pastoreo, terreno inclinado/ondulado con agua" 
              and presentacion ="Arriendo"
          group by mpio
      ) x, unnest(x.ar)
      

      更标准的方法是使用窗口函数:

      select * except(rn)
      from (
          select 
              fecha, id, producto, precio, mpio,cod_dpto, presentacion,
              row_number() over(partition by mpio order by fecha desc) rn
          from database
          where 
              categoria="Arrendamiento de tierras" 
              and tipo="Arrendamiento de tierras" 
              and producto="Cabeza de ganado mensual para pastoreo, terreno inclinado/ondulado con agua" 
              and presentacion ="Arriendo"
      ) t
      where rn = 1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-02
        • 2019-06-08
        • 1970-01-01
        相关资源
        最近更新 更多