ORDER BY的MySQL查询

ORDER BY的MySQL查询,mysql,sql,sql-order-by,Mysql,Sql,Sql Order By,我对MySQL有点生疏了。我需要一些人帮我搞定订单 我需要按类型排序,然后按组行日期最高的组排序,然后按日期排序每个组。 我需要进行一个查询,以按最早日期对组行进行排序。然后,我需要在该组中的最高日期之前对每个组进行订购。还有一件事。所有行都是一种类型,但每个组行都具有相同的类型 这是一个无组织表格的可视化表示 | DATE | GROUP | TYPE | ----------------------- | 2007 | 2 | 1 | | 2008 | 3 | 2

我对MySQL有点生疏了。我需要一些人帮我搞定订单

我需要按类型排序,然后按组行日期最高的组排序,然后按日期排序每个组。 我需要进行一个查询,以按最早日期对组行进行排序。然后,我需要在该组中的最高日期之前对每个组进行订购。还有一件事。所有行都是一种类型,但每个组行都具有相同的类型

这是一个无组织表格的可视化表示

| DATE | GROUP | TYPE |
-----------------------
| 2007 |     2 |    1 |
| 2008 |     3 |    2 |
| 2005 |     3 |    1 |
| 2004 |     2 |    1 |
| 2003 |     3 |    1 |
| 2012 |     3 |    2 |
| 2011 |     1 |    3 |
本组织:

| DATE | GROUP | TYPE |
-----------------------
| 2007 |     2 |    1 |
| 2004 |     2 |    1 |
| 2005 |     3 |    1 |
| 2003 |     3 |    1 |
| 2012 |     3 |    2 |
| 2008 |     3 |    2 |
| 2011 |     1 |    3 |
我试着按类型、组、日期排序,但这是不准确的。我不完全确定

以下是一组示例数据:

| ID |               SET |             BLOCK | SHORTNAME | RELEASEDATE | SETTYPE |
----------------------------------------------------------------------------------
|  1 | Return to Ravnica | Return to Ravnica |       rtr |  2012-09-29 |       1 |
|  2 |         Gatecrash | Return to Ravnica |      NULL |  2013-02-01 |       1 |
|  3 |      Dragons Maze | Return to Ravnica |      NULL |  2013-05-03 |       1 |
|  4 |   Avacyn Restored |         Innistrad |       avr |  2012-05-04 |       1 |
|  5 |    Dark Ascension |         Innistrad |       dka |  2012-02-03 |       1 |
|  6 |         Innistrad |         Innistrad |       isd |  2011-09-30 |       1 |
|  7 |      New Phyrexia | Scars of Mirrodin |       nph |  2011-05-13 |       1 |
|  8 | Mirrodin Besieged | Scars of Mirrodin |       mbs |  2011-02-04 |       1 |
|  9 | Scars of Mirrodin | Scars of Mirrodin |       som |  2010-10-01 |       1 |
组为块,类型为settype,日期为发布日期


我需要按块内日期排序的所有块行,按该块内最高日期行排序的每组块行,以及settype。

按降序排序日期,如下所示:

SELECT * FROM Table1
ORDER BY type, `group`, `date` desc
结果:

| DATE | GROUP | TYPE |
-----------------------
| 2007 |     2 |    1 |
| 2004 |     2 |    1 |
| 2005 |     3 |    1 |
| 2003 |     3 |    1 |
| 2012 |     3 |    2 |
| 2008 |     3 |    2 |
| 2011 |     1 |    3 |

从表中派生每个块的最高日期行集,然后将其连接回表,以使用ORDER BY子句中的最高日期:

SELECT
  t.*
FROM atable t
INNER JOIN (
  SELECT
    Block,
    MAX(ReleaseDate) AS HighestDate
  FROM atable
  GROUP BY Block
) s ON s.Block = t.Block
ORDER BY
  s.HighestDate,
  t.SetType,
  t.Block,
  t.ReleaseDate
;

这里的主要问题是它对组进行排序,但不按每个组中的最高行日期对组进行排序。@alrightgame-您所说的每个组中的最高行日期是什么意思?因为在组中,排序方式必须确保具有最新日期的组是第一个,依此类推,等等。@alrightgame-那么对于给定的数据,您希望得到什么结果呢?我想我在这里撒了个小谎;我试图组织的组是一个字符串,而不是一个数字。这可能很重要,因为它是按字母顺序而不是按日期排序的。请给我们您想要看到的输出。这非常接近,我昨天几乎得到了这个答案(我唯一缺少的顿悟是内部连接)。所需的只是更改顺序:按t.settype、s.highest desc、t.releasedate desc、t.block排序