2016-06-09 81 views
0

所以我在BQ一个查询,看起来这样的:BigQuery的使用MAX()函数

SELECT 
    SubscriptionId, 
    start_time, 
STRFTIME_UTC_USEC((UTC_USEC_TO_MONTH(TIMESTAMP_TO_USEC(TIMESTAMP(start_time)))),'%B %Y') AS cohort_month, 
    UTC_USEC_TO_MONTH(start_time) AS usec_month, 
    STRFTIME_UTC_USEC((UTC_USEC_TO_WEEK(TIMESTAMP_TO_USEC(TIMESTAMP(start_time)), 0)),'%Y-%m-%d') AS cohort_week, 
    WEEK(start_time) AS usec_week, 
    DATE(start_time) AS cohort_day, 
    UTC_USEC_TO_DAY(start_time) AS usec_day, 
    amount, 
    current_period_start, 
    current_period_end, 
    cancel_date, 
    end_date, 
    cancel_at_period_end, 
    salesRepEmail, 
    CASE WHEN (salesRepEmail IS NOT NULL) THEN 'Telesales' ELSE 'Online' END AS sales_channel, 
    status, 
    type_id, 
    CASE WHEN (type_id IN ('150032', 
     '150033', 
     '150023')) THEN 'Annual' ELSE 'Monthly' END AS duration, 
    refunded 
FROM 
    [data_snapshots_daily.subs_charges_refunds_] 
WHERE 
    start_time >= '2016-04-01 00:00:00' 
    AND refunded = FALSE 

我正在寻找做虽然,是对添加到查询,以便它返回所有相关来自最近一个月,一周和一天的数据。

所以我想它涉及MAX(usec_month),但我无法弄清楚。请记住,我只希望它返回相关的数据在最近一个月的时候它包括(6月)

回答

1

我想的东西像下面

为当月

WHERE YEAR(CURRENT_DATE()) = YEAR(start_time) 
AND MONTH(CURRENT_DATE()) = MONTH(start_time) 

当前周

WHERE YEAR(CURRENT_DATE()) = YEAR(start_time) 
AND WEEK(CURRENT_DATE()) = WEEK(start_time) 

为当天

WHERE CURRENT_DATE() = DATE(start_time) 

快速增加

了过去两周的东西,如下面的播放(应提高处理今年的第一周)

WHERE (YEAR(CURRENT_DATE()) = YEAR(start_time) AND WEEK(CURRENT_DATE()) = WEEK(start_time)) 
OR CASE WHEN WEEK(CURRENT_DATE()) = 1 
     THEN (YEAR(CURRENT_DATE()) - 1 = YEAR(start_time) AND 53 = WEEK(start_time)) 
     ELSE (YEAR(CURRENT_DATE()) = YEAR(start_time) AND WEEK(CURRENT_DATE()) - 1 = WEEK(start_time)) 
    END 

击穿上述声明(根据您的请求)

它查找属于当前周或前一周的开始时间。本周很简单。在前一周的情况下,看起来本周是不是一年的第一周 - 在这种情况下,情况是 - 同一年,但前一周。如果当前一周是一年中的第一周,它会寻找上一年的上周。

清洁版本来处理last two weeks条件

DATE(start_time)>DATE(DATE_ADD(CURRENT_DATE(),-7*1-DAYOFWEEK(CURRENT_DATE()),'DAY')) 

改变7*11让我们说3 - 给你调理last four weeks例如

+0

这是非常有益的,但我有一个后续问题。如果我还想在前一周添加,该怎么办?所以基本上,它会返回当前星期数据和前几周? – wizkids121

+0

在答案中看到“快速添加” –

+0

工作!谢谢! 虽然我仍然对CASE声明感到困惑。你能否分解究竟发生了什么? – wizkids121