2017-01-03 91 views
2

在傳統SQL中,我發現此語法非常適用於使用日期後綴從一組表中查詢最新表格。如何使用標準查詢查詢最新表格

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_20161205, tablename_20161206, tablename_20161219,查詢就會發現這是在這種情況下tablename_20161219最新的表,我也不需要通過所有表的外觀和指定最新的一個。

如何在標準SQL中實現這一點? Thx這麼多。

回答

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; 
+0

這是真棒,太感謝你了。根據你的回答,我有一個更簡單的解決方案,'用LatestTable AS(選擇Max(_table_Suffix)作爲TableName從\'project_id.dataset。* \'其中regexp_contains(_Table_Suffix,「tablename_2016」)SELECT * FROM \'project_id.dataset 。* \'WHERE _Table_Suffix =(從SelectTable中選擇TableName)'..再次感謝您的建議。 – HaipengSu

+0

如果這能幫助您,請您[請將答案標記爲已接受](http://stackoverflow.com/help/someone-answers)? –

2
SELECT * FROM `project_id.dataset.*` 
WHERE _TABLE_SUFFIX = (
    SELECT table_id 
    FROM `project_id.dataset.__TABLES_SUMMARY__` 
    ORDER BY table_id DESC 
    LIMIT 1) 
+0

這也行得通,謝謝@Mikhail Berlyant。 – HaipengSu

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)