我正在使用一个永久更新自身的系统,在这个系统中我尝试选择最高的500并列出它们。然而,问题是我通过包含日期格式为2013-07-08的varchar对其进行排序,这是一个遗物,暂时我不方便地将其更改为适当的日期以便于排序
我的问题是,如何只选择以下3个假装结果中的一个?
ID |价值| ownerid |日期
1| 21300 | 1 | 2013-07-08
2| 21300 | 1 | 2013-07-08
3| 21300 | 1 | 2013-07-08
我需要做的是从每个ownerid中选择一个条目,这个条目具有最高价值(如果它完全相同,哪个条目并不重要,只是它只有一个!)
这是使用带有PDO的mysql数据库作为数据库层。
感谢任何和所有帮助!
答案 0 :(得分:0)
使用带有GROUP BY
的子查询获取每天的特定ID(例如,max或min),然后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
答案 1 :(得分:0)
SELECT *
FROM [table]
ORDER BY STR_TO_DATE(yourdatefield, '%m/%d/%Y') DESC
LIMIT 5