SqlServer去除表中的重复列,商品表和评论表,一个相拼对应多个评论,只去一个商品的一个评论

本文介绍如何使用SQL语句去除重复的pid,同时保留每个pid中时间戳最大的评论记录,通过引入ROW_NUMBER()窗口函数进行分组排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Da_CommodityList是商品表,Da_CommodityComment 评论表 pid为商品id

SELECT row_number() OVER (  ORDER BY time DESC ) AS r_n ,
        comm.time ,
        comm.pid ,
        comm.users ,
        comm.contents ,
        comlist.pic_url ,
        comlist.p_name ,
        comlist.cur_price ,
        comlist.p_o_url ,
        comlist.web_name
   FROM    Da_CommodityList comlist
        LEFT JOIN Da_CommodityComment comm ON comlist.pid = comm.pid

   WHERE   comlist.pid IN ( 22390055, 22240438, 22240355, 20761416, 22390312,24341202 )


如下图虽然每一列都不同,但是又重复的pid,怎么去除重复的pid的一列,只保留一个



答案为:

 SELECT row_number() OVER (  ORDER BY time DESC ) AS r_n ,* FROM (SELECT  
        comm.time ,
        comm.pid ,
        comm.users ,
        comm.contents ,
        comlist.pic_url ,
        comlist.p_name ,
        comlist.cur_price ,
        comlist.p_o_url ,
        comlist.web_name,
         row_number() OVER ( PARTITION BY  comm.pid  ORDER BY comm.time DESC ) AS che        --按 pid 分组 按 time 排序  
   FROM    Da_CommodityList comlist
        LEFT JOIN Da_CommodityComment comm ON comlist.pid = comm.pid) 
    a 
   WHERE   pid IN ( 22390055, 22240438, 22240355, 20761416, 22390312,24341202 )  AND che=1

结果为下图


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值