一个去重SQL的思路

发布于 2022-09-01 18:18:53 字数 316 浏览 18 评论 0

某用户主页访问表visit,用来记录用户个人主页被访问的记录。
字段有:

id user_id_from user_id_to time

clipboard.png

现有查看用户主页访问记录的需求,去重需求为只保存某天内同一用户的最新一条的记录。
大家帮忙给给写这条SELECT语句的思路。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

温柔一刀 2022-09-08 18:18:53

额,我已经解决了,贴给大家看一看,关键是同时ORDER BY日期和人,写完了发现还是很简单的...

    <select id="getUserVisitDoListDistinct" parameterClass="java.util.Map" resultMap="userVisitDoResult">
        SELECT
            id,
            user_id_to,
            user_id_from,
            status,
            MAX(createtime) AS createtime 
        FROM
            (select * from dx_user_visit ORDER BY createtime DESC) AS foo 
        WHERE user_id_to = #user_id_to# AND user_id_from != #user_id_to#
        GROUP BY (DATE_FORMAT(createtime,"%Y%m%d")),user_id_from
        <isGreaterThan prepend="HAVING" property="lastId" compareValue="0">
           <![CDATA[
               id < #lastId# 
           ]]> 
        </isGreaterThan>
        ORDER BY createtime DESC
        LIMIT 0,#count#
    </select>
半步萧音过轻尘 2022-09-08 18:18:53

select v1.* from visit as v1
right join (
select id, max(createtime) as ctime from visit group by id
) as v2 on v1.id=v2.id and v1.createtime=v2.ctime

夜吻♂芭芘 2022-09-08 18:18:53

select v1.* from visit as v1
right join (
select vv1.id, max(vv1.createtime) as ctime from visit as vv1
inner join visit as vv2 on vv1.DATE_FORMAT(createtime,"%Y%m%d")=vv2..DATE_FORMAT(createtime,"%Y%m%d")
group by vv1.id
) as v2 on v1.id=v2.id and v1.createtime=v2.ctime

没有伤那来痛 2022-09-08 18:18:53

select user_id_from, min(createtime) last_visit_time from tablename group by user_id_from order by last_visit_time limit num;

南冥有猫 2022-09-08 18:18:53

select max time from tb group by usrid这样如何

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文