MySQL查询ORDER BY

时间:2012-12-17 06:27:15

标签: mysql sql sql-order-by

我对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。

2 个答案:

答案 0 :(得分:0)

按照这样的降序排列日期:

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 |

See this SQLFiddle

答案 1 :(得分:0)

从表中导出每个块的最高日期行集,然后将其连接回表以使用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
;