Google bigquery 在BigQuery中选择具有不同2列的最新事件
我有一个BigQuery表,其模式如下:Google bigquery 在BigQuery中选择具有不同2列的最新事件,google-bigquery,Google Bigquery,我有一个BigQuery表,其模式如下: { {"name": "timeCreated", "type": "datetime"}, {"name": "userid", "type": "string"}, {"name": "textid", "type": &
{
{"name": "timeCreated", "type": "datetime"},
{"name": "userid", "type": "string"},
{"name": "textid", "type": "string"},
{"name": "textvalue": "type": "float"}
}
我试图进行一个查询,因此我最终得到了为每对userid和textid组合创建的最新时间行。我尝试过GROUP BY等,但我似乎无法通过timeCreated字段获取顺序,然后删除每对userid和textid列中不在顶部的所有行。要获取Google BigQuery中组的最新或最早的第一个元素,您可以使用0]并按DESC或ASC使用适当的顺序:
WITH test_table AS (
SELECT DATETIME '2020-11-01 01:00:00' AS timeCreated, 'user1' AS userid, 'text1' AS textid, 1.1 AS textvalue UNION ALL
SELECT DATETIME '2020-11-01 03:00:00' AS timeCreated, 'user1' AS userid, 'text1' AS textid, 1.2 AS textvalue UNION ALL
SELECT DATETIME '2020-11-01 02:00:00' AS timeCreated, 'user1' AS userid, 'text1' AS textid, 1.3 AS textvalue UNION ALL
SELECT DATETIME '2020-11-01 02:00:00' AS timeCreated, 'user1' AS userid, 'text2' AS textid, 1.4 AS textvalue UNION ALL
SELECT DATETIME '2020-11-01 01:00:00' AS timeCreated, 'user1' AS userid, 'text2' AS textid, 1.5 AS textvalue UNION ALL
SELECT DATETIME '2020-11-01 00:00:00' AS timeCreated, 'user2' AS userid, 'text1' AS textid, 1.6 AS textvalue
)
SELECT
userid,
textid,
ARRAY_AGG(timeCreated ORDER BY timeCreated DESC)[OFFSET(0)] AS latest FROM test_table
GROUP BY userid, textid
要在Google BigQuery中获取组的latestlast或earliestfirst元素,您可以使用[0]并按DESC或ASC进行适当排序:
WITH test_table AS (
SELECT DATETIME '2020-11-01 01:00:00' AS timeCreated, 'user1' AS userid, 'text1' AS textid, 1.1 AS textvalue UNION ALL
SELECT DATETIME '2020-11-01 03:00:00' AS timeCreated, 'user1' AS userid, 'text1' AS textid, 1.2 AS textvalue UNION ALL
SELECT DATETIME '2020-11-01 02:00:00' AS timeCreated, 'user1' AS userid, 'text1' AS textid, 1.3 AS textvalue UNION ALL
SELECT DATETIME '2020-11-01 02:00:00' AS timeCreated, 'user1' AS userid, 'text2' AS textid, 1.4 AS textvalue UNION ALL
SELECT DATETIME '2020-11-01 01:00:00' AS timeCreated, 'user1' AS userid, 'text2' AS textid, 1.5 AS textvalue UNION ALL
SELECT DATETIME '2020-11-01 00:00:00' AS timeCreated, 'user2' AS userid, 'text1' AS textid, 1.6 AS textvalue
)
SELECT
userid,
textid,
ARRAY_AGG(timeCreated ORDER BY timeCreated DESC)[OFFSET(0)] AS latest FROM test_table
GROUP BY userid, textid
下面是BigQuery标准SQL
#standardSQL
select as value array_agg(t order by timeCreated desc limit 1)[offset(0)]
from `project.dataset.table` t
group by userid, textid
下面是BigQuery标准SQL
#standardSQL
select as value array_agg(t order by timeCreated desc limit 1)[offset(0)]
from `project.dataset.table` t
group by userid, textid