如何根据字段日期获取大查询的最新记录
How to get the latest record on big query based on field date
这是我的查询
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"
它return
[id, producto, precio, fecha,mpio,cod_dpto, presentacion]
所以我只想获取 fecha 字段中每个 Popayan 和 Piendamo 的延迟记录
在 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)
更标准的方法是使用window函数:
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
更“简单”的版本(对于 BigQuery Standard 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
这是我的查询
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"
它return
[id, producto, precio, fecha,mpio,cod_dpto, presentacion]
所以我只想获取 fecha 字段中每个 Popayan 和 Piendamo 的延迟记录
在 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)
更标准的方法是使用window函数:
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
更“简单”的版本(对于 BigQuery Standard 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