【发布时间】:2015-06-19 21:43:50
【问题描述】:
我有一个在我们的 MYSQL 数据库上运行的查询。它需要永远运行,所以我想改用 BigQuery。相关表(a.xxx)已经在云端,我已经尝试调整 BQ 的代码,但我没有任何运气。该查询主要提取每天购买的个人数量,以及在首次购买后 1-7 天再次购买的那些相同个人的数量。我将不胜感激!!!!
这是查询:
select f.fts_date,
count(distinct f.FTS_id) as FTS_count,
count(distinct s.passportid) as SVS_count,
(count(distinct s.passportid)/count(distinct f.FTS_id)) as return_rate
from
(select passportid as FTS_id,addressid, date(signdatetime) as FTS_date from a.xxx
where date(signdatetime)>'2015-6-10' and fts="Y" and disposition="accepted") as f
left join a.xxx as s
on f.passportid=s.passportid and f.addressid=s.addressid and s.disposition="accepted" and
s.signdatetime between date_add(f.signdatetime, 1, "DAY") and date_add(f.signdatetime, 7, "DAY")
group by 1
【问题讨论】:
-
可以添加a.xxx表的表定义吗?同样这一行:和fts =“N”看起来很有趣:别名(fts)如何成为值“N”。也许最好不要使用也是列名的别名。
-
我更改了别名和一些列名,以减少混乱。最初,我对其进行了更改,以使代码更通用,以便将其发布在在线论坛上。
-
相关列的模式:passportid, integer, nullable addressid,integer,nullable signdatetime, timestamp, nullable 当前错误是:错误:ON 子句必须是 AND of = 每个表中一个字段名的比较,所有字段名都以表名为前缀。
-
请更好地格式化您的代码(使用更多换行符)。还要在您的问题中添加架构请求或类似的内容,以便每次都变得更具可读性。话虽如此:试试这个:替换: s.signdatetime 在 date_add(f.signdatetime, 1, "DAY") 和 date_add(f.signdatetime, 7, "DAY") 之间: s.signdatetime > date_add(f.signdatetime, 1, "DAY") 和 s.signdatetime
标签: mysql google-bigquery intervals dateadd