如何基于日期和条件获取最早的唯一行

我有一个如下所示的表,

email               tag    updated
email1@domain.com   tag1   2019-10-01
email1@domain.com   tag2   2018-10-01
email2@other.com    tag3   2019-10-01
email2@other.com    tag4   2017-04-01
email3@xyz.com      tag4   2017-11-01
email3@xyz.com      tag1   2019-10-01
email3@xyz.com      tag3   2018-11-08

查询需要执行以下操作:

  1. 检查每个电子邮件地址的最早标签。

  2. 如果最早的标签与tag1或tag2匹配,则将其包括在结果中。

  3. 结果中没有重复的电子邮件地址。

例如,对上述数据集的查询结果将是:

email1@domain.com   tag2   2018-10-01
luxiaofeng_374 回答:如何基于日期和条件获取最早的唯一行

使用min()聚合功能

 select t1.*,t2.tag from (
  select min(updated) updated,email 
  from tableA 
  where tag in ('tag1','tag2')
  group by email) as t1
left join tableA t2 on t2.email = t1.email and t1.updated = t2.updated

dbfiddle

,

在MySQL 8+上,我将在此处使用ROW_NUMBER

WITH cte AS (
    SELECT *,ROW_NUMBER() OVER (PARTITION BY email ORDER BY updated) rn
    FROM yourTable
)

SELECT email,tag,updated
FROM cte
WHERE rn = 1 AND tag IN ('tag1','tag2');

CTE从最早的记录开始,为每组电子邮件记录分配一个行号。然后,子查询找到最早的记录,但前提是它们的标签是tag1tag2

本文链接:https://www.f2er.com/3162397.html

大家都在问