我想要 table 的最新日期和价格,在大查询中该 ID 有多个不同日期的价格。下面是我的查询

I want the latest date and price from the table which has multiple prices with different date on that ID in big query. here is my query below

我面临的问题是我不想按价格列分组。我只想按 id 分组,这样我就可以获得最新的日期和价格。但是大查询不允许我 运行 这个查询没有按价格分组。

这是我的查询:

SELECT ID, 最大(创建日期)作为最新日期, 价格 来自 table name 按id分组

我有一个解决办法给你。它不是最干净的,但它可以工作。

SELECT id, "created date" as "latest date", price 
FROM (SELECT id, 
FIRST_VALUE("created date") OVER (PARTITION BY id ORDER BY "created date" DESC) as "created date", 
FIRST_VALUE("price") OVER (PARTITION BY id ORDER BY "created date" DESC) as "price" 
FROM "table name")
GROUP BY id

我觉得这个应该也可以

SELECT UNIQUE id, 
FIRST_VALUE("created date") OVER (PARTITION BY id ORDER BY "created date" DESC) as "created date", 
FIRST_VALUE("price") OVER (PARTITION BY id ORDER BY "created date" DESC) as "price" 
FROM "table name"

使用以下方法

select as value 
  array_agg(t order by created_date desc limit 1)[offset(0)] 
from your_table t
group by id

在这种情况下,我使用了聚合函数ARRAY_AGG,它returns 一个按日期排序的数组,每个ID 只获取一条记录。还, 我使用 OFFSET 命令从零位置读取数组。

WITH Example AS
(SELECT 1 as ID, 32.5 as price, PARSE_DATE("%x", "12/25/22")  as sdate UNION ALL
SELECT 1 as ID, 3 as price,  PARSE_DATE("%x",'01/13/22') as sdate UNION ALL
SELECT 2 as ID, 2.5 as price,  PARSE_DATE("%x",'01/30/22')  as sdate UNION ALL
SELECT 3 as ID, 5 as price,  PARSE_DATE("%x",'01/20/22')  as sdate UNION ALL
SELECT 4 as ID, 50 as price,  PARSE_DATE("%x",'01/10/22') as sdate UNION ALL
SELECT 4 as ID, 1.13 as price,  PARSE_DATE("%x",'01/08/22') as sdate UNION ALL
SELECT 5 as ID, 150 as price,  PARSE_DATE("%x",'01/05/22') as sdate UNION ALL
SELECT 6 as ID, 30 as price,  PARSE_DATE("%x",'01/05/22') as sdate UNION ALL
SELECT 7 as ID, 5.2 as price,  PARSE_DATE("%x",'01/03/22') as sdate UNION ALL
SELECT 8 as ID, 200 as price,  PARSE_DATE("%x",'02/01/22') as sdate
)
SELECT AS VALUE ARRAY_AGG(table ORDER BY sdate DESC LIMIT 1)[OFFSET(0)]
FROM Example table
group by id