Mysql 如何按特定顺序对结果进行分组?

Mysql 如何按特定顺序对结果进行分组?,mysql,group-by,sql-order-by,Mysql,Group By,Sql Order By,我有一个视图,其中包含来自多个表的大量信息。在该视图中执行查询时,我需要通过列的值对结果进行分组 我的主要问题是,在分组时,结果没有按照我需要的顺序出现。我注意到,在对数据库进行分组时,它在指定的列中找到了第一条不同的记录,而忽略了其余的记录 问题是,我需要包含分组词的最后一行。在进行分组之前,我已经尝试过排序,但即使如此,我的数据库引擎似乎也忽略了以前进行的排序 以下表为例,我的观点如下: 我怎么知道每种颜色被字符注册的最后日期是哪一天 也就是说,我需要所有表列按日期顺序描述和按颜色分组 +-

我有一个视图,其中包含来自多个表的大量信息。在该视图中执行查询时,我需要通过列的值对结果进行分组

我的主要问题是,在分组时,结果没有按照我需要的顺序出现。我注意到,在对数据库进行分组时,它在指定的列中找到了第一条不同的记录,而忽略了其余的记录

问题是,我需要包含分组词的最后一行。在进行分组之前,我已经尝试过排序,但即使如此,我的数据库引擎似乎也忽略了以前进行的排序

以下表为例,我的观点如下:

我怎么知道每种颜色被字符注册的最后日期是哪一天

也就是说,我需要所有表列按日期顺序描述和按颜色分组

+------+------------+-------+------------+ | id | name | color | date | +------+------------+-------+------------+ | 1 | SweetRobin | Green | 2017-01-01 | | 2 | Tyrion | Red | 2017-02-01 | | 3 | Sansa | Grey | 2017-03-01 | | 4 | Ned | Grey | 2017-04-01 | | 5 | Margaery | Green | 2017-05-01 | | 6 | Oberyn | Red | 2017-06-01 | +------+------------+-------+------------+ +------+------------+-------+------------+ |id |姓名|颜色|日期| +------+------------+-------+------------+ |1 | SweetRobin | Green | 2017-01-01| |2 |提利昂|红色| 2017-02-01| |3 |桑萨|格雷| 2017-03-01| +------+------------+-------+------------+ 但我真正需要的是:

+------+----------+-------+------------+ | id | name | color | date | +------+----------+-------+------------+ | 4 | Ned | Grey | 2017-04-01 | | 5 | Margaery | Green | 2017-05-01 | | 6 | Oberyn | Red | 2017-06-01 | +------+----------+-------+------------+ +------+----------+-------+------------+ |id |姓名|颜色|日期| +------+----------+-------+------------+ |4 |内德|格雷| 2017-04-01| |5 |马加里|格林| 2017-05-01| |6 |奥伯林|红| 2017-06-01| +------+----------+-------+------------+
如果我正确理解你的意图,你可以试试

SELECT c.*
  FROM (
  SELECT color, MAX(date) date
    FROM caracter
   GROUP BY color
) q JOIN caracter c 
    ON q.color = c.color 
   AND q.date = c.date
 ORDER BY id
其思想是,您首先获取每种颜色的最大日期,然后返回以获取所有其他列

输出:

+------+----------+-------+------------+ | id | name | color | date | +------+----------+-------+------------+ | 4 | Ned | Grey | 2017-04-01 | | 5 | Margaery | Green | 2017-05-01 | | 6 | Oberyn | Red | 2017-06-01 | +------+----------+-------+------------+ +------+----------+-------+------------+ |id |姓名|颜色|日期| +------+----------+-------+------------+ |4 |内德|格雷| 2017-04-01| |5 |马加里|格林| 2017-05-01| |6 |奥伯林|红| 2017-06-01| +------+----------+-------+------------+
下面是一个演示

显示用于生成输出的SQL和PHP代码,而不仅仅是输出。编辑您的问题以添加代码。没有PHP代码。只是需要知道字符注册每种颜色的最后日期是哪一天?根据我的经验,如果我使用caracter GROUP By color的SELECT*,输出将是:1 SweetRobin Green 2017-01-01 2 Tyrion Red 2017-02-01 3 Sansa Grey 2017-03-01,但我需要的是4 Ned Grey 2017-04-01 5 Margaery Green 2017-05-01 6 Oberyn Red 2017-06-01这正是我需要的。三天就要找到这个答案了。非常感谢你。不仅是为了答案,也是为了文章的编辑。你能告诉我如何在邮局制作这张桌子吗?我很高兴这张桌子适合你。您可以使用
标记插入从mysql控制台获得的普通ascii表输出。你也可以点击你的帖子,看看它是如何完成的。
SELECT c.*
  FROM (
  SELECT color, MAX(date) date
    FROM caracter
   GROUP BY color
) q JOIN caracter c 
    ON q.color = c.color 
   AND q.date = c.date
 ORDER BY id
+------+----------+-------+------------+ | id | name | color | date | +------+----------+-------+------------+ | 4 | Ned | Grey | 2017-04-01 | | 5 | Margaery | Green | 2017-05-01 | | 6 | Oberyn | Red | 2017-06-01 | +------+----------+-------+------------+