我有一个表,通过IP、版本和平台记录下载。手动查看表时,我看到许多重复的值,其中所有3个值都是相同的。(用户可能有点不耐烦了)我想使用SELECT语句过滤掉重复的条目,如果所有的3个值都相同的话,只返回一个条目。如果可能的话,我还有一个使用CURRENT_TIMESTAMP的日期/时间字段。如果是来自不同的日子,但不是不同的时间的话,我最好能包括副本。所以我可以看到同一用户是否在不同的一天再次下载。
我主要是想得到关于每天有多少人下载每个版本的统计数据。DB表的结构很简单.
密钥(AUTO_INCREMENT),日期(CURRENT_TIMESTAMP),ip,user_agent,平台,版本
该软件有Windows和Mac版本(平台),我提供了当前版本和以前几个不同的版本,这些版本都是在重大更改之前的版本。
发布于 2019-04-08 17:59:41
只需按要避免复制的字段分组,如
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)然后,在日间对结果分组进行一些更高级的过滤就比较容易了,等等。
发布于 2019-04-08 17:43:17
这是你想要的吗?它返回ip/platform/version组合的每个日期的第一个记录:
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)
);发布于 2019-04-08 17:50:19
mysql 8.0+版本您可以使用row_number()
select * from (select *,
row_number()over(partition by ip,platform,date(datetime) order by datetime) rn
from table_name
) a where a.rn=1https://stackoverflow.com/questions/55578920
复制相似问题