gpt4 book ai didi

mysql - 选择重复项并保留最旧的(不基于 ID)

转载 作者:行者123 更新时间:2023-11-29 13:50:12 25 4
gpt4 key购买 nike

感谢您的帮助,我陷入了这个问题。

让我解释一下,我有这样的表:

| domain |     creationdate    | value 1 | value 2 |
|--------|---------------------|---------|---------|
| abc | 2013-05-28 15:35:01 | value 1 | value 2 |
| abc | 2013-04-30 12:10:10 | value 1 | value 2 |
| aaa | 2011-04-02 13:10:10 | value 1 | value 2 |
| bbb | 2012-02-12 10:48:10 | value 1 | value 2 |
| bbb | 2013-04-15 07:15:23 | value 1 | value 2 |

我想选择(使用子查询)这个:

| domain |     creationdate    | value 1 | value 2 |
|--------|---------------------|---------|---------|
| abc | 2013-04-30 12:10:10 | value 1 | value 2 |
| aaa | 2011-04-02 13:10:10 | value 1 | value 2 |
| bbb | 2012-02-12 10:48:10 | value 1 | value 2 |

我尝试将子查询与 WHERE 子句中的 IN/NOT IN 和 group by/having 进行组合,但我无法获得正确的结果。

我还有另一个问题要问,如果有人已经遇到过此类问题,我很高兴听到他是如何解决这个问题的。

您在上面看到的第一个表中的记录经常(每十分钟)删除/插入。我的目标是制作结果的副本(或者可能是 View )(没有重复的条目),该副本将由 postfix 邮件服务器 24/7 使用。我听说大 View (带有许多子查询)会降低性能,这意味着表将是更好的选择。问题是,如果我必须每十分钟创建一个新表,就会有一点停机时间,并且 postfix 将无法读取该表。

等待您的建议,谢谢。

编辑:

根据@Ed Gibbs 的回答,有一个更好的示例:

源表:

| domain     |     creationdate    | value 1 | value 2 |
|------------|---------------------|---------|---------|
| google.com | 2013-05-28 15:35:01 | john | mary |
| google.com | 2013-04-30 12:10:10 | patrick | edward |
| yahoo.fr | 2011-04-02 13:10:10 | britney | garry |
| ebay.com | 2012-02-12 10:48:10 | harry | mickael |
| ebay.com | 2013-04-15 07:15:23 | bill | alice |

您的查询结果是源表。

期望的结果:

| domain     | value 1 | value 2 |
|------------|---------|---------|
| google.com | patrick | edward |
| yahoo.fr | britney | garry |
| ebay.com | harry | mickael |

我想保留最旧的域(具有最短创建日期)及其自己的值 1 和 2。

<小时/>

新问题!

我根据您的回答查看了所需的结果。

结果如下所示:

| domain     | value 1 | foreign_key |
|------------|---------|-------------|
| google.com | patrick | X |
| yahoo.fr | britney | Y |
| ebay.com | harry | Z |

我还有一个包含此类条目的表格:

| email              | value 1 | foreign_key |
|--------------------|---------|-------------|
| john@google.com | patrick | X |
| john@google.com | britney | Y |
| harry@google.com | mary | X |
| mickael@google.com | jack | X |
| david@ebay.com | walter | Z |
| alice@yahoo.com | brian | Y |

假设(在此示例中)来自 Yforeign_key 的电子邮件 %@google.com 不是好的记录(只有来自 Xforeign_key 的 %google.com 才是好的记录,而且因为它的域名是我根据创建日期选择的域名)选择)我如何才能仅选择新 View 中引用的域/fk 中的电子邮件?

期望的结果:

| email              | value 1 | foreign_key |
|--------------------|---------|-------------|
| john@google.com | patrick | X |
| harry@google.com | mary | X |
| mickael@google.com | jack | X |
| david@ebay.com | walter | Z |
| alice@yahoo.com | brian | Y |

我尝试使用 CONCAT('%','@',domain) 和foreign_key=foreign_key 连接,但它没有给我我想要的。

最佳答案

根据您的示例数据和结果,GROUP BY 将为您提供所需的结果:

SELECT
domain,
MIN(creationdate) AS creationdate,
value1,
value2
FROM mytable
GROUP BY domain, value1, value2
<小时/>

附录:@Arka 提供了更新的示例数据,其中 value 1value 2 列具有不同的值(在原始数据中,它们是相同的)。这会将查询更改为:

SELECT domain, creationdate, value1, value2
FROM mytable
WHERE (domain, creationdate) IN (
SELECT domain, MIN(creationdate)
FROM mytable
GROUP BY domain)

子查询获取每个的最早creationdate的列表,外部查询仅选择domain所在的行>creationdate 与子查询值匹配。

关于mysql - 选择重复项并保留最旧的(不基于 ID),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16799799/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com