0

感谢您的帮助,我被困在这个问题上。

让我解释一下,我有这种表:

| 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/have 组合子查询,但我无法获得正确的结果。

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

您在上面看到的第一个表中的记录经常(每十分钟)被删除/插入。我的目标是制作结果的副本(或者可能是视图)(没有重复的条目),后缀邮件服务器将全天候 24/7 使用它。我听说大视图(带有许多子查询)会降低性能,这意味着表将是一个更好的选择。问题是如果我必须每十分钟创建一个新表,就会有一点停机时间,并且 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 |

我想保留最旧的域(具有最小创建日期)具有自己的 value1 和 2。


新问题!

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

结果如下所示:

| 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           |

假设(在此示例中)来自 Y foreign_key 的电子邮件 %@google.com 不是好的记录(只有来自 X foreign_key 的 %google.com 是好的记录,而且因为它的域是我选择创建日期选择的域)如何我可以设法仅从我的新视图中引用的域/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 加入,但它没有给我我想要的。

4

1 回答 1

1

根据您的样本数据和结果,aGROUP 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外部查询仅选择domaincreationdate匹配子查询值的行。

于 2013-05-28T19:26:27.383 回答