繁体   English   中英

每个ID仅选择一个条目

[英]Select only one entry per ID

我正在使用一个会定期更新自身的系统,在这个系统中,我尝试选择最高的500个并列​​出它们。 但是,问题是我按包含日期为2013-07-08的日期的varchar对其进行排序,这是一个遗物,暂时不方便将其更改为适当的日期,以方便排序。

我的问题是,如何从以下3个伪装结果中仅选择1个?

id | 价值| ownerid | 日期

1| 21300 | 1       | 2013-07-08
2| 21300 | 1       | 2013-07-08
3| 21300 | 1       | 2013-07-08

我需要做的是从每个ownerid中选择一个条目,该条目是具有最高值的条目(如果相同,那么实际上哪个条目都不重要,只是它只是一个!)

这使用带有PDO作为数据库层的mysql数据库。

感谢您提供的所有帮助!

使用带有GROUP BY的子查询来获取每天的特定ID(例如,最大或最小),然后将其与表进行JOIN以获得其余的详细信息:

SELECT a.id, a.value, a.ownerid, a.date
FROM SomeTable a
INNER JOIN
(
    SELECT date, MAX(id) AS MaxId
    FROM SomeTable
    GROUP BY date
) b
ON a.date = b.date
AND a.id = b.MaxId

修改版本以获取每天的最高价值行。 由于值不是唯一的,因此我进行了进一步的子选择,以获取该最高值的最高ID。 没有这个,您可能会在一天内返回多行。 如果其他值彼此不同的可能性为零,则可以使用DISTINCT删除倍数,但通常无法确定。

SELECT a.id, a.`value`, a.ownerid, a.`date`
FROM SomeTable a
INNER JOIN
(
    SELECT `date`, MAX(`value`) AS MaxVal
    FROM SomeTable
    GROUP BY `date`
) b
ON a.`date` = b.`date`
AND a.`value` = b.MaxVal
INNER JOIN
(
    SELECT `date`, `value`, MAX(id) AS MaxId
    FROM SomeTable
    GROUP BY `date`, `value`
) c
ON b.`date` = c.`date`
AND b.MaxVal = c.`value`
AND a.id = c.MaxId
SELECT * 
FROM [table] 
ORDER BY STR_TO_DATE(yourdatefield, '%m/%d/%Y') DESC 
LIMIT 5

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM