查询以获取亚马逊红移中给定日期到 48 小时内的数据
Posted
技术标签:
【中文标题】查询以获取亚马逊红移中给定日期到 48 小时内的数据【英文标题】:Query to fetch data from given date to 48 hrs in amazon red shift 【发布时间】:2016-01-28 08:04:59 【问题描述】:使用 redshift 中的数据,我们需要了解 48 小时内在一个平台上购物并在另一个数字平台上购买的 id 的数量。
每个平台都有一个单独的事实表,用户 ID 在所有表中都是通用的。
我正在尝试使用以下代码,但没有用。非常感谢任何帮助。
Select Distinct a.id ,
b.login androidLogin,
c.login iPadLogin,
d.login iPhoneLogin,
e.login MobileLogin,
f.login WebLogin
from
users a inner join
fct_android_20160101_20160331 b
on a.id = b.userid
inner join
fct_ipad_20160101_20160331 c
on a.id = c.userid
inner join
fct_iphone_20160101_20160331 d
on a.id = d.userid
inner join
fct_mobilepolaris_20160101_20160331 e
on a.id = e.userid
inner join
fct_polaris_20160101_20160331 f
on a.id = f.userid
where (b.date between '2016-01-01' and dateadd(day,2,date))
or (c.date between '2016-01-01' and dateadd(day,2,date))
or (d.date between '2016-01-01' and dateadd(day,2,date))
or (e.date between '2016-01-01' and dateadd(day,2,date))
or (f.date between '2016-01-01' and dateadd(day,2,date))
and id > 0
and id <> 'null'
and length(Id) = 10
and LEFT(Id,1) IN ('0','1','2','3','4','5','6','7','8','9')
order by 1
;
【问题讨论】:
【参考方案1】:您需要LEFT JOIN
表格。做一个普通的JOIN
意味着你将只检索那些在该期间在所有平台上购买过东西的id
s。这样做并清理你得到的格式,更具可读性:
SELECT DISTINCT a.id,
b.login AndroidLogin,
c.login iPadLogin,
d.login iPhoneLogin,
e.login MobileLogin,
f.login WebLogin
FROM users a
LEFT JOIN fct_android_20160101_20160331 b ON a.id = b.userid AND b.date BETWEEN '2016-01-01' AND '2016-01-03'
LEFT JOIN fct_ipad_20160101_20160331 c ON a.id = c.userid AND c.date BETWEEN '2016-01-01' AND '2016-01-03'
LEFT JOIN fct_iphone_20160101_20160331 d ON a.id = d.userid AND d.date BETWEEN '2016-01-01' AND '2016-01-03'
LEFT JOIN fct_mobilepolaris_20160101_20160331 e ON a.id = e.userid AND e.date BETWEEN '2016-01-01' AND '2016-01-03'
LEFT JOIN fct_polaris_20160101_20160331 f ON a.id = f.userid AND f.date BETWEEN '2016-01-01' AND '2016-01-03'
WHERE length(a.id) = 10
AND left(a.id,1) IN ('0','1','2','3','4','5','6','7','8','9')
ORDER BY 1;
【讨论】:
优秀。感谢您的澄清。您能否帮助查看用户是否在 48 小时内登录了一个平台并在另一个平台上进行了购买。例如,如果 id 'a' 已于 2016 年 1 月 1 日登录到 android,我想写一个查询,如果相同的 id 在 2 天内使用过任何其他平台。希望我说清楚了。我是新用户,需要一些帮助。在此先感谢。 一般方法是UNION
5 个平台表,然后SELECT DISTINCT login
和GROUP BY login HAVING count(*) > 1
。但是如果你想得到一个确定的答案,你真的应该把它作为一个新问题并发布表格结构。以上是关于查询以获取亚马逊红移中给定日期到 48 小时内的数据的主要内容,如果未能解决你的问题,请参考以下文章