感谢您的帮助,我坚持这个问题。
让我解释一下,我有这样的表:
| 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进行子查询的组合,并按/有组,但是我无法获得正确的结果。
我还有另一个问题要问,如果有人已经遇到过这种问题,我会很高兴听到他如何设法解决这个问题。
您在上面看到的第一个表格中的记录经常(每隔10分钟)被删除/插入。我的目的是制作一个后缀邮件服务器将24/7全天候使用的结果(没有重复条目)的副本(或可能是视图)。我听说大视图(有很多子查询)会降低性能,这意味着表格会是一个更好的选择。问题是,如果我必须每隔十分钟制作一张新表,那么会有一点停机时间,后缀将无法读取该表。
等待你的建议,谢谢。
编辑:
根据@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。
新问题!
我基于你的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外国的%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('%','@',域名)和foreign_key = foreign_key加入,但它没有给我我想要的内容。
答案 0 :(得分:1)
根据您的示例数据和结果,GROUP BY
会为您提供您所追求的结果:
SELECT
domain,
MIN(creationdate) AS creationdate,
value1,
value2
FROM mytable
GROUP BY domain, value1, value2
附录:@Arka提供了更新的示例数据,其中value 1
和value 2
列具有不同的值(原始版本相同)。这会将查询更改为:
SELECT domain, creationdate, value1, value2
FROM mytable
WHERE (domain, creationdate) IN (
SELECT domain, MIN(creationdate)
FROM mytable
GROUP BY domain)
子查询获取每个creationdate
最早domain
的列表,外部查询仅选择domain
和creationdate
匹配子查询值的行。< / p>