2017-06-29 30 views
0

我在Bigquery有不同的查詢,但只需要一個月運行一次(包含上個月的所有關閉數據)。 目前我在查詢中手動更改日期,但是我需要改變它,並創建一個函數,讓我得到最後過去的數據。如何在BigQuery中查詢自動日期?

例如:我運行這個查詢7月1日或2日,並且需要查詢從6月1日到30日查詢數據。 (查詢用標準SQL方言編寫)

謝謝。

代碼:

SELECT 
    hits.contentGroup.contentgroup2 AS CampaignGrouping, 
    custd.value AS member_PK, 
    PARSE_TIMESTAMP('%Y%m%d',date) AS date, 
    'WebMobile' AS Canal, 
    'MX' AS country_id, 
    SUM(hits.contentGroup.contentGroupUniqueViews2) AS VistasUnicas 
FROM 
    `bigquery-xxxx-xxxxx.111111.ga_sessions*`, 
    UNNEST(customdimensions) custd, 
    UNNEST(hits) AS hits 
WHERE 
    1 = 1 
    AND PARSE_TIMESTAMP('%Y%m%d', REGEXP_EXTRACT(_table_suffix, r'.*_(.*)')) BETWEEN TIMESTAMP('2017-06-01') AND TIMESTAMP('2017-06-30') 
    AND custd.index=30 
    and hits.contentGroup.contentGroup2 <> '(not set)' 
    AND custd.value <> 'null' 
    AND hits.contentGroup.contentGroupUniqueViews2 IS NOT NULL 
GROUP BY 1, 2, 3, 4, 5 

回答

0

下面是BigQuery的標準SQL,假設有保存日期信息日期字段dt

#standardSQL 
SELECT * 
FROM yourTable 
WHERE DATE_TRUNC(dt, MONTH) = 
    DATE_TRUNC(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH), MONTH) 

上述假定DT場的數據類型爲DATE

如果dt是STRING類型 - 請嘗試在

以下
#standardSQL 
WITH yourTableAS (
    SELECT '2017-05-30' AS dt UNION ALL 
    SELECT '2017-05-31' UNION ALL 
    SELECT '2017-06-01' UNION ALL 
    SELECT '2017-06-02' UNION ALL 
    SELECT '2017-06-03' 
) 
SELECT * 
FROM yourTable 
WHERE DATE_TRUNC(CAST(dt AS DATE), MONTH) = 
    DATE_TRUNC(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH), MONTH) 

在情況下,如果DT具有不同的格式「YYYY-MM-DD」你可以使用PARSE_DATE投字符串到日期

+0

感謝@Mikhail,但我有一個匹配的格式問題。錯誤:參數類型的函數DATE_TRUNC沒有匹配的簽名:STRING,DATE_TIME_PART。支持的簽名:DATE_TRUNC(DATE,DATE_TIME_PART)at [13:7] –

+0

顯示您的數據示例 - 特別是dt字段以及它的數據類型是什麼?看起來像你有字符串在這裏,只需要將其投到DATE –

+0

嗨@Mikhail,我有不同來自GA的數據集,我從不同的數據集queryng數據。日期唯一的字段是「日期」並且是字符串類型。我在主要問題上覆制代碼。 –