2017-08-09 54 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