日期问题 - 如何解析此 SQL 中的日期

问题描述 投票:0回答:1

当我运行代码时,不断发生日期错误。我已经解析了日期,但我怀疑我需要在代码的其他地方解析它。我尝试过这样做,但我显然错过了一些东西。

当 t1 单独运行时,我没有收到任何错误,因此我怀疑问题出在 t2 或 t3 中。

查询的数据是公开的GA4数据集,大家可以自己尝试一下。

提前非常感谢。

WITH t1 AS (
    SELECT
        PARSE_DATE('%Y%m%d', event_date) AS event_date,
        user_pseudo_id,
        COUNT(DISTINCT user_pseudo_id) AS users,
        MAX(CASE WHEN params.key = "ga_session_id" THEN params.value.int_value ELSE 0 END) AS sessionId,
        CASE WHEN event_name = "first_visit" THEN 1 ELSE 0 END AS newUsers,
        COUNT(ecommerce.transaction_id) AS conversions,
        SUM(ecommerce.purchase_revenue) AS totalRevenue
    FROM
        `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*` AS ga, 
        UNNEST (event_params) AS params
    WHERE 
        _table_suffix BETWEEN '20210101' AND '20210131'
    GROUP BY  event_date, user_pseudo_id, event_name, ecommerce.transaction_id
),
t2 AS (
    SELECT 
        user_pseudo_id,
        COUNT(ecommerce.transaction_id) AS conv,
        AVG(COUNT(ecommerce.transaction_id)) 
            OVER (
                PARTITION BY user_pseudo_id
                ORDER BY user_pseudo_id
                ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING 
            ) AS avg_conversion,
        CAST(MAX(event_date) AS DATE) AS most_recent_purchase, 
        CAST(MIN(event_date) AS DATE) AS first_purchase 
    FROM
        `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*` AS ga, 
        UNNEST (event_params) AS params
    WHERE 
        _table_suffix BETWEEN '20210101' AND '20210131'
    GROUP BY user_pseudo_id, event_date
),
t3 AS (
    SELECT 
        user_pseudo_id,
        DATE_DIFF(
            t2.most_recent_purchase, t2.first_purchase, DAY
        ) / 30.0 AS day_in_between_purchases,
        t2.avg_conversion AS conversions
    FROM t2
    GROUP BY user_pseudo_id, most_recent_purchase, first_purchase, avg_conversion
)
SELECT 
    t1.event_date,
    t4.newUsers,
    t4.conversions,
    t4.totalRevenue
FROM (
    SELECT
        t1.user_pseudo_id,
        t1.event_date,
        SUM(newUsers) AS newUsers,
        SUM(conversions) AS conversions,
        CONCAT('$', IFNULL(SUM(totalRevenue), 0)) AS totalRevenue
    FROM 
        t1
    GROUP BY t1.user_pseudo_id, t1.event_date
) AS t4
LEFT JOIN t3 ON t3.user_pseudo_id = t4.user_pseudo_id
LEFT JOIN t2 ON t2.user_pseudo_id = t4.user_pseudo_id
WHERE t2.conv > 0;

sql date google-bigquery google-analytics-4
1个回答
0
投票

作为快速观察......当您解析

event_date
中的
t1
时,您不会在
t2
中执行此操作。

所以……如果

event_date
不是没有日期,我不会认为这是理所当然的,你的SQL方言(MS SQL Server?)可以只是
cast
它。

除此之外......应该有一些有用的错误消息(有时它们甚至带有位置信息)。

© www.soinside.com 2019 - 2024. All rights reserved.