Php 如何使用MYSQL进行排序和分组?
我有一张桌子Php 如何使用MYSQL进行排序和分组?,php,mysql,sql,greatest-n-per-group,Php,Mysql,Sql,Greatest N Per Group,我有一张桌子 ----------------------------------- Date | Prefilling | Ref ----------------------------------- 10/10/2017 | 5 | dinesh 17/10/2017 | 8 | Ajay 07/05/2017 | 5 | Aarthi 01/01/2018
-----------------------------------
Date | Prefilling | Ref
-----------------------------------
10/10/2017 | 5 | dinesh
17/10/2017 | 8 | Ajay
07/05/2017 | 5 | Aarthi
01/01/2018 | 8 | Kumar
-----------------------------------
如何同时执行order by和group by?
我使用下面的查询,但它没有给出实际结果
SELECT * FROM (
select * from table order by str_to_date(date,'%d/%m/%Y') DESC
) AS tmp_table group by Prefilling
我期待着结果,还有裁判
Array
(
[5] => 10/10/2017, dinesh
[8] => 01/01/2018, kumar
}
根据显示的结果,您希望获得每次预填充的最新日期。您可以使用MAX来实现这一点,并使用最大值对其进行排序
SELECT Prefilling, MAX(STR_TO_DATE(`date`,'%d/%m/%Y')) AS MAX_DATE
FROM TableName
GROUP BY Prefilling
ORDER BY MAX_DATE
这里有一个
以下是根据您的更新问题得到的更新答案。您可以分别检索子查询中每个预填充的最新日期,并将结果与原始表本身连接,前提是它在两个条件(预填充和最新日期)上都匹配,以获取所有列
SELECT a.*
FROM TableName a
INNER JOIN
(
SELECT Prefilling, MAX(str_to_date(date,'%d/%m/%Y')) AS MAX_DATE
FROM TableName
GROUP BY Prefilling
) b ON a.Prefilling = b.Prefilling
AND str_to_date(a.date,'%d/%m/%Y') = b.MAX_DATE
ORDER BY b.MAX_DATE
a我想知道为什么要将日期存储为字符串,而从mysql的内置日期函数中查询存储数据会更容易。如果你还不太了解这一点,那么现在就改变你的设计还不算晚。@Bill你在php上很有天赋,如果你认为它可能是重复的,为什么不关闭它呢?编辑:-@FunkFortyNiner如果问题不是完全重复的话,我有时会犹豫是否结束。但你是对的,在这种情况下,这是一个经典的每组n个最大的问题。“已经有成百上千的问题得到了回答。”比尔,还有一个有趣的描述,就是这个标签;很好的选择。Soory@John Woo,我期待着与Ref一起输出。@Thirukumaran查看我的更新答案。@Thirukumaran你期待与Ref一起输出是什么意思??