在Legacy SQL中,我发现这种语法对于使用Date Suffix查询表集中的最新表非常有用。
[
'value' => function($data){
$sum = array();
foreach ($data->orderInfo as $request){
$sum[] = $request->order_items_offer_name;
}
return implode(',',$sum);
}],
所以,如果我有SELECT *
FROM
TABLE_QUERY([project_id:dataset],
'table_id = (SELECT MAX(table_id)
FROM [project_id:dataset.__TABLES__]
WHERE table_id CONTAINS "tablename_2016")
')
这样的表集,查询将在这种情况下找到最新的表tablename_20161219,我不需要查看所有表并指定最新的表。
如何在标准SQL中实现此目的? 太多了。
答案 0 :(得分:3)
SELECT * FROM `project_id.dataset.*`
WHERE _TABLE_SUFFIX = (
SELECT table_id
FROM `project_id.dataset.__TABLES_SUMMARY__`
ORDER BY table_id DESC
LIMIT 1)
答案 1 :(得分:2)
您可以使用wildcard table(可能使用过滤器来限制初始搜索)。例如,
WITH RecentTables AS (
SELECT *, _TABLE_SUFFIX
FROM `project_id.dataset.*`
WHERE _TABLE_SUFFIX >= "tablename_2016"
),
LatestTable AS (
SELECT *
FROM RecentTables
WHERE _TABLE_SUFFIX = (SELECT MAX(_TABLE_SUFFIX) FROM RecentTables)
)
SELECT *
FROM LatestTable;
答案 2 :(得分:0)
为了更好看,我在标准SQL中的查询将是,
With LatestTable AS
(
Select Max(_table_Suffix) as LatestTableName
From `project_id.dataset.*`
Where regexp_contains(_Table_Suffix, "tablename_2016")
)
SELECT *
FROM `project_id.dataset.*`
WHERE _Table_Suffix = (Select LatestTableName from LatestTable)