gpt4 book ai didi

sql - 基于最近日期的sql计数

转载 作者:行者123 更新时间:2023-11-29 12:03:19 24 4
gpt4 key购买 nike

我正在尝试计算从他们注册到的任何设备进行交易的唯一用户数。

这是我的查询:

select Distinct 
username ,
case
when user_agent like '%Android%' then 'Android'
when user_agent like '%iPhone%' OR user_agent like '%Iphone%' then 'IOS'
else 'Internet Banking'
end as type,
min(time)
from
activeUsers
group by
(1, 2);

但是,在结果集中我得到了这个:

Image Showing query results

例如,我希望根据最新日期对用户 ujvs24hxen9/abdallah 进行计数,例如仅在网上银行中计数一次,而不在网上银行和 ios 中计数。

我该怎么做?我正在使用 postgresql

谢谢!

最佳答案

使用 PostgreSQL 的 DISTINCT ON (username) 为每个用户只获取一条记录。首先使用 ORDER BY 子句获取每个用户所需的记录(即最新的):

select distinct on (username)
username,
case when user_agent like '%Android%' then 'Android'
when user_agent like '%iPhone%'
or user_agent like '%Iphone%' then 'IOS'
else 'Internet Banking'
end as type,
time
from activeusers
order by username, time desc;

关于你自己的查询:

  • GROUP BY xyz 表示您希望每个 xyz 一个结果行。在您的查询中,您按前两列分组,因此您会为每个用户和类型获得一个结果行。但是您只需要每个用户一个结果行。因此,在 GROUP BY 子句中输入是没有意义的。
  • DISTINCT 从结果中删除重复的行。当您按用户和类型分组并且这两列都被选中时,不会有重复项;这两列已经使每一行都不同,因此在这些行上应用 DISTINCT 是多余的。
  • 而且您甚至没有地方尝试查找每个用户的最新时间并使用它来访问所需的记录。很明显这个查询是行不通的。

关于sql - 基于最近日期的sql计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42488581/

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