在我的应用程序中,我使用user_id,device_id(ifa)和登录日期在名为sessios_logs的表中存储登录。并且我将购买与user_id,金额和购买日期存储在称为购买的表中。
下面是这两个表的示例输出,我尝试在每次购买时匹配session_logs中相应的ifa值。
session_logs
uid ifa date
7560168721 CCC 1
7560168721 AAA 3
7560168721 BBB 5
7560168721 AAA 8
7560168721 AAA 10
购买
uid amount date <ifa>?
7560168721 $1 2 CCC
7560168721 $9 4 AAA
7560168721 $5 7 BBB
7560168721 $4 11 AAA
那么如何找到最近的登录日期和每次购买的ifa值?
我不知道在检查session_logs中的最大日期并且登录日期早于购买日期时如何迭代每一行。
感谢。
答案 0 :(得分:1)
select
uid,
amount,
date,
(
select ifa
from session_logs
where
uid = purchases.uid and
date < purchases.date
order by date desc
limit 1
)
from purchases;
答案 1 :(得分:1)
您可以使用窗口函数,但遗憾的是它们不允许在WHERE
部分中,因此围绕它有一个包装器查询:
select
uid,
amount,
date,
ifa
from
(
select
l.uid,
amount,
p.date as date,
max(l.date) over (partition by l.uid, p.date) as max_date,
l.ifa
from
session_logs l
join purchases p on
l.uid = p.uid and
l.date <= p.date
-- where l_date = max(l.date) over (partition by l.uid, p.date)
) t
where l_date=max_date;
答案 2 :(得分:1)
您可以使用其中一个窗口功能将购买日期与最近的会话日期相匹配。
SELECT uid, amount, date, ifa
FROM
(SELECT
t1.uid,
t2.amount,
t2.date AS date,
ROW_NUMBER() OVER (PARTITION BY t1.uid, t2.date) AS rn,
t1.ifa
FROM
session_logs t1
JOIN purchases t2 ON
t1.uid = t2.uid AND
t1.date <= t2.date) x1
WHERE x1.rn = 1