sql - 在列中显示两个不同日期的数据

标签 sql google-analytics bigdata google-bigquery

在 Google BigQuery 中,我想并排显示两个不同日期的数据。我想显示今天的数据,然后显示 7 天前的数据进行比较。我的 FROM 子句选择一系列表,每个表对应一个日期。

SELECT
  DATE(TIMESTAMP(INTEGER(visitStartTime*1000000))) AS GMT_Date,
  DAYOFWEEK(TIMESTAMP(INTEGER(visitStartTime*1000000))) AS GMT_Weekday,
  IF(hits.customDimensions.index=15, hits.customDimensions.value, NULL) AS apikey,
  hits.eventInfo.eventCategory AS event_category,
  SUM(totals.visits) AS visit_count,


  DATE(DATE_ADD(TIMESTAMP(INTEGER(visitStartTime*1000000)),-7,"DAY")) AS test,
 // HERE I need to show SUM(totals.visits) but for the date of 'test' above

FROM (TABLE_DATE_RANGE([100610078.ga_sessions_], TIMESTAMP('20150529'),TIMESTAMP('20150711')))
WHERE
  IF(hits.customDimensions.index=15, hits.customDimensions.value, NULL) IS NOT NULL
GROUP BY
  GMT_Date,
  GMT_Weekday,
  event_category,
  test,
  apikey
ORDER BY
  GMT_Date DESC,
  visit_count DESC
LIMIT
  30

在“测试”之后,我想显示测试日期的访问总和。我该怎么办呢?我在 BigQuery 语法页面上没有看到任何类似的内容。

这是当前返回内容的图像:http://prntscr.com/7s8w58

在“测试”列之后,我想要一个类似于 previous_week_visits 的列,该列具有与访问计数相同的数据,但包含测试日期。

最佳答案

一种方法是使用窗口函数。您可以使用固定基数的 DATEDIFF 将 DATE 映射为连续的 INTEGER,然后使用 LAG 函数查找值,以下查询显示了此方法的示例:

select 
  d,
  value,
  lag(d, 3) over (order by diff) prev_d,
  lag(value, 3) over (order by diff) prev_value
from (
select d, datediff(d, date('1970-01-01')) diff, value from
(select date('2012-01-01') d, 'a' value),
(select date('2012-01-02') d, 'b' value),
(select date('2012-01-03') d, 'c' value),
(select date('2012-01-04') d, 'd' value),
(select date('2012-01-05') d, 'e' value),
(select date('2012-01-06') d, 'f' value),
(select date('2012-01-07') d, 'g' value),
(select date('2012-01-08') d, 'h' value),
(select date('2012-01-09') d, 'i' value),
(select date('2012-01-10') d, 'j' value)
)

结果是:

Row d           value   prev_d      prev_value   
1   2012-01-01  a       null        null     
2   2012-01-02  b       null        null     
3   2012-01-03  c       null        null     
4   2012-01-04  d       2012-01-01  a    
5   2012-01-05  e       2012-01-02  b    
6   2012-01-06  f       2012-01-03  c    
7   2012-01-07  g       2012-01-04  d    
8   2012-01-08  h       2012-01-05  e    
9   2012-01-09  i       2012-01-06  f    
10  2012-01-10  j       2012-01-07  g

关于sql - 在列中显示两个不同日期的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31390269/

相关文章:

SQL用于解析多行数据?

mysql - 如何通过powershell将一个查询的结果插入到另一个数据库

ios - Swift 中 Google Analytics 异常跟踪的正确语法是什么?

sql - BigQuery 的 Google Analytics 数据中的页面组合

c# - 在输入文本中有多个 % 运算符的 LINQ 中等效的 SQL LIKE 运算符是什么?

sql - 如何乘以表列中的值?

java - 致命异常 : main java. lang.NoClassDefFoundError : com. google.analytics.tracking.android.EasyTracker

caching - 在内存中缓存大量数据

mysql - 使用 talend 将数据从一个 mysql 数据库迁移到另一个数据库

r - 覆盖 R 对象时如何管理内存?