oracle over(partition BY) 函数用法

本文介绍了一种使用SQL进行数据去重并按接收时间降序排列的方法。通过子查询结合row_number()窗口函数实现去除重复记录,并保留每个用户最新的邮件接收时间。此技巧适用于需要处理大量邮件数据的应用场景。

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

sql:

SELECT u.user_id,
    u.user_name,
    u.mail_receive_time
  FROM mail_user u,
    mail_interior i
  WHERE u.mail_id          = i.mail_id
  AND i.mail_creator       = '8440'
  AND u.mail_status       <> 3
  AND u.user_id           <> i.mail_creator
  AND u.mail_receive_time IS NOT NULL
  ORDER BY u.mail_receive_time DESc;
 前:

-

--去重复后

SELECT u.user_id,u.user_name,u.mail_receive_time
FROM
  (SELECT a.* ,
    row_number() over(partition BY a.user_id order by a.mail_receive_time DESC)rn
  FROM
    (SELECT u.user_id,
      u.user_name,
      u.mail_receive_time
    FROM mail_user u,
      mail_interior i
    WHERE u.mail_id          = i.mail_id
    AND i.mail_creator       = '8440'
    AND u.mail_status       <> 3
    AND u.user_id           <> i.mail_creator
    AND u.mail_receive_time IS NOT NULL
    ) a
  )u
WHERE rn=1
order by u.mail_receive_time desc;



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值