3

こんな感じのテーブルがあります。

my_id |    date
-------------------  
  1   | 2013-04-01
  1   | 2013-04-02
  2   | 2013-04-03
  1   | 2013-04-04
  3   | 2013-04-05
  2   | 2013-04-06

この結果が得られる SQL クエリが必要です。

my_id |    date
-------------------  
  2   | 2013-04-06
  2   | 2013-04-03
  3   | 2013-04-05
  1   | 2013-04-04
  1   | 2013-04-02
  1   | 2013-04-01

したがって、同じ my_id を持つすべてを日付の降順でまとめたいと思います。また、my_id のグループは、グループ内の最新の日付に基づいて降順で並べ替える必要があります。

これは、スレッド化された会話のようなものです。my_id が会話 ID で、日付がその会話への投稿の日付であるとします。したがって、リストに表示するときは、最新の投稿との会話が一番上に表示されるはずです。

フォローアップの質問 my_id が NULL の場合、それらはグループ化されるべきではありませんが、日付順に並べ替えられます。これは、たとえば会話の一部ではない場合です。

my_id |    date
-------------------  
  1   | 2013-04-01
  1   | 2013-04-02
  2   | 2013-04-03
  1   | 2013-04-04
 NULL | 2013-04-05
  2   | 2013-04-06
 NULL | 2013-04-07

上記の表は次のようになります

my_id |    date
-------------------  
 NUll | 2013-04-07
  2   | 2013-04-06
  2   | 2013-04-03
 NULL | 2013-04-05
  1   | 2013-04-04
  1   | 2013-04-02
  1   | 2013-04-01
4

1 に答える 1

4

次のことを試してください。

SELECT A.my_id, A.YourDate
FROM YourTable A
INNER JOIN (SELECT my_id, MAX(YourDate) MaxDate
            FROM YourTable
            GROUP BY my_id) B
    ON A.my_id = B.my_id
ORDER BY B.MaxDate DESC, A.YourDate DESC

更新しました

これが値で必要なものかどうかはわかりませんNULLが、とにかく:

SELECT A.my_id, A.YourDate
FROM YourTable A
LEFT JOIN ( SELECT my_id, MAX(YourDate) MaxDate
            FROM YourTable
            WHERE my_id IS NOT NULL
            GROUP BY my_id) B
    ON A.my_id = B.my_id
ORDER BY COALESCE(B.MaxDate,A.YourDate) DESC, A.YourDate DESC
于 2013-04-11T20:23:52.137 に答える