两个 SQL 语句的遗留问题

2015-02-17 21:45:54   最后更新: 2015-02-20 21:04:55   访问数量:1437




有一个表 A:

表 A 结构及数据
time_strremote_host
2015-02-17 21:25:53112.142.97.54
2015-02-17 21:25:52128.9.1.2
2015-02-17 19:13:43133.09.12.38
2015-02-17 18:44:10128.9.1.2
2015-02-16 23:27:36136.22.15.99
2015-02-16 23:27:19136.22.15.99
2015-02-17 21:25:08128.9.1.2
2015-02-16 23:30:24136.22.15.99
2015-02-16 23:28:2644.52.142.7
2015-02-16 23:28:06112.142.97.54
2015-02-17 20:50:26133.09.12.38
2015-02-17 19:59:35112.142.97.54
2015-02-17 20:50:32133.09.12.38
2015-02-16 23:30:28136.22.15.99
2015-02-17 18:43:54133.09.12.38
2015-02-17 18:43:46112.142.97.54
2015-02-16 23:32:42112.142.97.54
2015-02-16 23:32:38127.09.18.29
2015-02-16 23:28:0244.52.142.7
2015-02-16 23:27:0444.52.142.7

 

要求求出每一天中对 remote_host 字段去重后的元组数

结果如下:

sql 执行结果
datetotal
2015-02-173
2015-02-164

 

注意

需要注意的是,remote_host 必须是每天内去重,天和天之间不能去重

如:

虽然在 2015-02-16 的数据中,包含了 112.142.97.54,他同时出现在 2015-02-17 中,如果按全表去重,则 2015-02-16 求出的 total 将是去掉该条数据后的结果,即 3,这是不符合要求的

 

法一

select date(time_str) as day, count(distinct remote_host) as num from A group by day;

 

 

法二

select uA.d as date, count(uA.remote_host) as num from (select date(time_str) as d, host from A group by date(time_str), remote_host) uA

 

 

有一个表 B:

表 B 结构及数据
titlecategory_idupdatetime
title1302015-02-16 23:27:04
title2252015-02-17 23:24:04
title3302015-02-11 21:27:04
title4302014-02-11 21:27:04
title5252015-01-17 23:24:04
title6252013-02-17 23:24:04
title7302015-02-11 21:27:04
title8302014-08-11 21:27:04
title9252013-01-17 23:24:04
title10252012-02-17 23:24:04
title11302015-04-11 21:27:04

 

需要 select 出表中每个 category_id 最新的 3 个元组

 

欢迎关注微信公众号,以技术为主,涉及历史、人文等多领域的学习与感悟,每周三到七篇推文,只有全部原创,只有干货没有鸡汤

 






技术帖      mysql      sql      技术分享      遗留问题      博客      blog      group by      order by      limit      数据库      已解决     


京ICP备15018585号