首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SELECT DISTINCT不返回distinct值

SELECT DISTINCT不返回distinct值
EN

Stack Overflow用户
提问于 2012-08-21 20:48:15
回答 3查看 802关注 0票数 0

我使用以下MYSQL来获取不同的emails.to值,但请参见下面的结果

代码语言:javascript
复制
SELECT DISTINCT `emails`.`to`,`emails`.`from` as fromEmail, `emails`.`time` as timestamp
FROM `emails` 
WHERE ((`emails`.`from` = 'sdadr@googlemail.com') 
OR (`emails`.`to` = '887')) 
AND (`emails`.`to` != 0) 
ORDER BY `id` DESC LIMIT 4

-

代码语言:javascript
复制
to    fromEmail             timestamp
370   sdadr@googlemail.com  2012-08-15 16:52:15
1923  sdadr@googlemail.com  2012-08-15 10:54:48
890   sdadr@googlemail.com  2012-08-15 10:43:06
890   sdadr@googlemail.com  2012-08-15 10:43:02

为什么它返回一个重复的890?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-21 20:49:55

因为时间戳不同。DISTINCT用于整行,而不仅仅是一列。

这会将您的时间戳截断为日期,然后890将不会重复。就像Nikola Markovinović建议的那样。

代码语言:javascript
复制
SELECT DISTINCT `emails`.`to`,`emails`.`from` as fromEmail, DATE(`emails`.`time`) as timestamp
FROM `emails` 
WHERE ((`emails`.`from` = 'sdadr@googlemail.com') 
OR (`emails`.`to` = '887')) 
AND (`emails`.`to` != 0) 
ORDER BY `id` DESC LIMIT 4

如果你只想截断秒数,这也会得到你想要的结果,你可以这样做:

代码语言:javascript
复制
SELECT DISTINCT `emails`.`to`,`emails`.`from` as fromEmail, 
DATE_FORMAT(`emails`.`time`, '%Y-%m-%d %H:%i') as timestamp
FROM `emails` 
WHERE ((`emails`.`from` = 'sdadr@googlemail.com') 
OR (`emails`.`to` = '887')) 
AND (`emails`.`to` != 0) 
ORDER BY `id` DESC LIMIT 4

Manual entry for DATE_FORMAT()获取更多信息。

根据您的评论,如果您只想拥有唯一的emails.to,只需选择该列,不再使用DISTINCT

代码语言:javascript
复制
SELECT DISTINCT `emails`.`to`
FROM `emails` 
WHERE ((`emails`.`from` = 'sdadr@googlemail.com') 
OR (`emails`.`to` = '887')) 
AND (`emails`.`to` != 0) 
ORDER BY `id` DESC LIMIT 4
票数 3
EN

Stack Overflow用户

发布于 2012-08-21 20:51:25

如上所述,截断到日期:

代码语言:javascript
复制
SELECT DISTINCT `emails`.`to`,`emails`.`from` as fromEmail, DATE(`emails`.`time`) as timestamp
FROM `emails` 
WHERE ((`emails`.`from` = 'sdadr@googlemail.com') 
OR (`emails`.`to` = '887')) 
AND (`emails`.`to` != 0) 
ORDER BY `id` DESC LIMIT 4
票数 0
EN

Stack Overflow用户

发布于 2012-08-21 20:53:10

代码语言:javascript
复制
SELECT DISTINCT `emails`.`to` 
  FROM `emails`  WHERE ((`emails`.`from` = 'sdadr@googlemail.com')  OR (`emails`.`to` = '887'))  AND (`emails`.`to` != 0)  
  ORDER BY `id` DESC LIMIT 4 

根据您的问题,您正在寻找不同的to地址,您可以从该查询中获得它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12055186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档