gpt4 book ai didi

mysql - 如何根据日期返回新 ID?

转载 作者:太空宇宙 更新时间:2023-11-03 11:41:54 24 4
gpt4 key购买 nike

我有一个包含以下数据的表(仅作为示例,实际表有 600,000 行)(aid = access id [primary key] and id = user id [foreign key]):

aid  |  id  |  date
332 | 1 | 2016-12-15
331 | 4 | 2016-12-15
330 | 3 | 2016-12-15
329 | 1 | 2016-12-14
328 | 1 | 2016-12-14
327 | 2 | 2016-12-14
326 | 3 | 2016-12-13
325 | 2 | 2016-12-13
324 | 1 | 2016-12-13
323 | 1 | 2016-12-12
322 | 3 | 2016-12-12
321 | 1 | 2016-12-12

每个 id 都是一个用户主键,每次他们访问我系统中的某些内容时,我都会将他们记录在这个表中(日期格式如图所示,以及他们的 id)。一个用户一天可以登录多次。

我希望:返回事物在一天内被访问的总次数,并返回过去 8 天内在一天内访问过事物的新用户总数(有些东西总是每天记录,因此使用“LIMIT 8”可以只获取最后 8 天)。

我的 SQL 当前看起来像:

SELECT COUNT(id), COUNT(distinct id), date
FROM table
GROUP BY date
ORDER BY date DESC
LIMIT 8;

该 SQL 正确地完成了第一部分,但我无法弄清楚如何让它返回那天之前从未访问过该事物的用户数量。

期望的结果是,“newuser”代表 ID 为“4”的用户,因为他们之前从未访问过该内容:

COUNT(id)  |  newusers  |  date
3 | 1 | 2016-12-15
3 | 0 | 2016-12-14
3 | 0 | 2016-12-13
3 | 0 | 2016-12-12

抱歉,如果我解释得不够清楚。

最佳答案

要在 ID 出现的第一天获得您想要的新用户:

select id, min(date)
from t
group by id;

剩下的只是一个joingroup by:

select d.date, cnt, count(dd.id) as newusers
from (select date, count(*) as cnt
from t
group by date
) d left join
(select id, min(date) as mindate
from t
group by id
) dd
on d.date = dd.mindate
group by d.date, d.cnt
limit 8;

关于mysql - 如何根据日期返回新 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41162603/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com