【问题标题】:SQL query return duplicate with most recent date and moreSQL 查询返回具有最近日期等的重复项
【发布时间】:2011-04-28 19:50:12
【问题描述】:

我有一张桌子:'person' 有很多列。 我需要返回没有“重复”(定义如下)的每个条目的整行以及以下内容:在该表中找到共享属性的条目:first_name、last_name 和 work_phone(这些是我的重复项目的),并仅返回其 date_modified 字段中具有最新值的条目,忽略其余条目。

我觉得这要么是一个相当高级的查询,要么看似简单。无论哪种方式,我都无法弄清楚。我正在使用 MySQL 5。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    仅返回 date_modified 字段中具有最新值的条目,忽略其余条目:

    SELECT p.* FROM
      ( SELECT max(date_modified) as most_recent_date 
        FROM person 
        GROUP BY first_name,last_name,work_phone ) p1
    JOIN person p
    ON p.date_modified = p1.most_recent_date
    

    假设 date_modified 对于我们分组的每个字段组合都是唯一的,这将很有效。如果不是,我们必须加入一个唯一的字段,取一个满足最新条件的任意 UUID(限制 1)。

    SELECT p.* FROM
      ( SELECT *,max(date_modified) as most_recent_date 
        FROM person 
        GROUP BY first_name,last_name,work_phone ) p1
    JOIN person p
    ON p.UUID =
      ( SELECT p_uniq.UUID 
        FROM person p_uniq
        WHERE p_uniq.first_name = p1.first_name
          AND p_uniq.last_name = p1.last_name
          AND p_uniq.work_phone = p1.work_phone
          AND p_uniq.date_modified = p1.most_recent_date
        LIMIT 1 )
    

    最后,返回没有“重复”的每个条目的整行:

    SELECT * , count( * ) AS entries
    FROM `person`
    GROUP BY first_name, last_name, work_phone
    HAVING entries =1
    

    【讨论】:

    • 此查询返回的结果数是 person 表中条目数的两倍。它像我问的那样返回重复的行,但每行返回 10-12 次。
    • 条目是否有可能具有完全相同的 date_modified 字段?
    • 那么什么字段使记录唯一呢?如果它们都相同,您如何确定最近的?
    • 你必须加入这个 UUID,然后等等
    • 你能这样做吗:`SELECT p.* FROM (SELECT max(date_modified) as most_recent_date, id FROM person GROUP BY first_name,last_name,work_phone) p1 JOIN person p ON p.id = p1.身份证
    猜你喜欢
    • 2018-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-30
    • 1970-01-01
    • 2023-03-31
    • 2014-11-03
    • 1970-01-01
    相关资源
    最近更新 更多