2017-08-09 89 views
0

我創建了一個靜態表,我想要加入到此查詢以添加到我的結果中。該表被命名爲「平板電腦」,幷包含字段:分支,tablet_id,imei和電話。在我的複雜查詢中內聯接到另一個表

我想匹配IMEI並將分支,tablet_id和手機作爲列添加到結果中。但是,由於此查詢的複雜性,我不明白如何操作。

SELECT 
    event_dim.date AS Date, 
    (
    SELECT 
    value.value.string_value 
    FROM 
    UNNEST(user_dim.user_properties) 
    WHERE 
    key = 'imei_id') AS IMEI, 
    (
    SELECT 
    value.value.string_value 
    FROM 
    UNNEST(user_dim.user_properties) 
    WHERE 
    key = 'division_id') AS Branch, 
    (
    SELECT 
    value.value.string_value 
    FROM 
    UNNEST(user_dim.user_properties) 
    WHERE 
    key = 'truck_id') AS Truck, 
    (
    SELECT 
    value.value.string_value 
    FROM 
    UNNEST(user_dim.user_properties) 
    WHERE 
    key = 'installer_id') AS Installer, 
    COUNT(*) AS Count 
FROM 
    `smarttruck-6d137.com_usiinc_android_ANDROID.app_events_*` 
CROSS JOIN 
    UNNEST(event_dim) AS event_dim 
WHERE 
    event_dim.name = 'app_exception' 
    AND EXISTS (
    SELECT 
    1 
    FROM 
    UNNEST(event_dim.params) 
    WHERE 
    key = 'fatal' 
    AND value.int_value = 1) 
    AND REGEXP_EXTRACT(_TABLE_SUFFIX, r'(\d+)') BETWEEN FORMAT_DATE("%Y%m%d", DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY)) 
    AND FORMAT_DATE("%Y%m%d", DATE_SUB(CURRENT_DATE(), INTERVAL 0 DAY)) 
GROUP BY 
    Date, 
    IMEI, 
    Branch, 
    Truck, 
    Installer 
ORDER BY 
    Date DESC, 
    Count DESC; 

回答

2

假設在你的問題主要查詢是正確的 - 嘗試簡單的LEFT JOIN對你已經擁有的比我想象的

#standardSQL 
SELECT 
    date, main.IMEI, main.Branch, Truck, Installer, count, 
    tablets.branch, tablet_id, phone 
FROM (
    SELECT 
    event_dim.date AS DATE, 
    (SELECT value.value.string_value FROM UNNEST(user_dim.user_properties) WHERE key = 'imei_id') AS IMEI, 
    (SELECT value.value.string_value FROM UNNEST(user_dim.user_properties) WHERE key = 'division_id') AS Branch, 
    (SELECT value.value.string_value FROM UNNEST(user_dim.user_properties) WHERE key = 'truck_id') AS Truck, 
    (SELECT value.value.string_value FROM UNNEST(user_dim.user_properties) WHERE key = 'installer_id') AS Installer, 
    COUNT(*) AS COUNT 
    FROM `smarttruck-6d137.com_usiinc_android_ANDROID.app_events_*` 
    CROSS JOIN UNNEST(event_dim) AS event_dim 
    WHERE event_dim.name = 'app_exception' 
    AND EXISTS (SELECT 1 FROM UNNEST(event_dim.params) WHERE key = 'fatal' AND value.int_value = 1) 
    AND REGEXP_EXTRACT(_TABLE_SUFFIX, r'(\d+)') BETWEEN FORMAT_DATE("%Y%m%d", DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY)) 
    AND FORMAT_DATE("%Y%m%d", DATE_SUB(CURRENT_DATE(), INTERVAL 0 DAY)) 
    GROUP BY DATE, IMEI, Branch, Truck, Installer 
) main 
LEFT JOIN `yourproject.yourdataset.tablets` AS tablets 
ON tablets.imei = main.IMEI 
ORDER BY date DESC, count DESC 
+0

容易。我不知道如何構建它,這很好。謝謝! – Selch