首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只从多列中选择唯一记录

只从多列中选择唯一记录
EN

Stack Overflow用户
提问于 2019-04-08 17:40:34
回答 3查看 51关注 0票数 0

我有一个表,通过IP、版本和平台记录下载。手动查看表时,我看到许多重复的值,其中所有3个值都是相同的。(用户可能有点不耐烦了)我想使用SELECT语句过滤掉重复的条目,如果所有的3个值都相同的话,只返回一个条目。如果可能的话,我还有一个使用CURRENT_TIMESTAMP的日期/时间字段。如果是来自不同的日子,但不是不同的时间的话,我最好能包括副本。所以我可以看到同一用户是否在不同的一天再次下载。

我主要是想得到关于每天有多少人下载每个版本的统计数据。DB表的结构很简单.

密钥(AUTO_INCREMENT),日期(CURRENT_TIMESTAMP),ip,user_agent,平台,版本

该软件有Windows和Mac版本(平台),我提供了当前版本和以前几个不同的版本,这些版本都是在重大更改之前的版本。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-04-08 17:59:41

只需按要避免复制的字段分组,如

代码语言:javascript
复制
SELECT ip, platform, version, COUNT(*) AS number_of_tries, max(download_date) AS last_download_date 
FROM downloads
GROUP BY ip, platform, version, DATE(download_date)

然后,在日间对结果分组进行一些更高级的过滤就比较容易了,等等。

票数 1
EN

Stack Overflow用户

发布于 2019-04-08 17:43:17

这是你想要的吗?它返回ip/platform/version组合的每个日期的第一个记录:

代码语言:javascript
复制
select t.*
from <tablename> t
where t.datetime = (select min(t2.datetime)
                    from <tablename> t2
                    where t2.ip = t.ip and
                          t2.platform = t.platform and
                          t2.version = t.version and
                          date(t2.datetime) = date(t.datetime)
                   );
票数 0
EN

Stack Overflow用户

发布于 2019-04-08 17:50:19

mysql 8.0+版本您可以使用row_number()

代码语言:javascript
复制
select * from (select *,
row_number()over(partition by ip,platform,date(datetime) order by datetime) rn
       from table_name 
) a where a.rn=1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55578920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档