如何使用标准查询查询最新的表

时间:2017-01-03 18:15:17

标签: google-bigquery

在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中实现此目的? 太多了。

3 个答案:

答案 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)