我有一个表,该表按IP,版本和平台记录下载。手动查看该表,我看到很多重复项,其中所有三个值都相同。 (用户可能只是不耐烦)我想使用SELECT语句来过滤出重复项,并且仅当所有三个值都相同时才返回条目之一。如果可能的话,甚至更高级,我还有一个使用CURRENT_TIMESTAMP的日期/时间字段。如果我可以包括重复的副本(如果它们来自不同的日期,但没有不同的时间),那将是很好的。因此,我可以查看同一位用户是否在另一天再次下载。
我主要是想获取每天有多少独立用户下载每个版本的统计数据。数据库表的结构很简单...
密钥(AUTO_INCREMENT),日期(CURRENT_TIMESTAMP),ip,用户代理,平台,版本
该软件具有Windows和Mac版本(平台),我提供了当前版本以及进行重大更改之前的一些不同的过去版本。
答案 0 :(得分:1)
仅按要排除重复的字段分组,例如
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 :(得分:0)
这是您想要的吗?它返回每个日期的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)
);
答案 2 :(得分:0)
row_number()
的mysql 8.0+版本
select * from (select *,
row_number()over(partition by ip,platform,date(datetime) order by datetime) rn
from table_name
) a where a.rn=1