0

私はMySQLに少し錆びています。注文を把握するのに助けが必要です。

タイプ別に並べ替え、次にグループ行の日付が最も高いグループ別に並べ替え、次に各グループを日付順に並べ替える必要があります。グループ行を最も高い日付で並べ替えるクエリを作成する必要があります。次に、各グループをそのグループ内の最高の日付で並べ替える必要があります。もう1つだけあります。すべての行はタイプですが、各グループ行は同じタイプです。

これは、整理されていないテーブルの視覚的表現です

| 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が必要です。

4

2 に答える 2

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 |

このSQLFiddleを参照してください

于 2012-12-17T06:33:02.693 に答える
0

テーブルからブロックごとの最高の日付の行セットを取得し、それをテーブルに結合して、ORDERBY句で最高の日付を使用します。

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
;
于 2012-12-17T09:37:33.350 に答える