1

ID の最初の出現に基づいて ID でグループ化されるように、ログ テーブルを注文しようとしています。以下の私の例では、テーブル「test」があり、テーブルを ID でグループ化して、すべての ID が一緒になるようにします。つまり、すべての '623' エントリをリストしてからすべての '444' エントリをリストします。最初の '623' レコードが最初の '444' エントリよりも前にあるため、'623' エントリを最初に配置します。

入力:

╔═══════╦════════════╦═════╗
║  uid  ║    time    ║ id  ║
╠═══════╬════════════╬═════╣
║  001  ║  01:45:10  ║ 623 ║
║  002  ║  02:45:20  ║ 444 ║
║  003  ║  03:45:30  ║ 444 ║
║  004  ║  04:45:40  ║ 623 ║
║  005  ║  05:45:50  ║ 623 ║
║  006  ║  06:45:00  ║ 444 ║
╚═══════╩════════════╩═════╝

出力:

╔═══════╦════════════╦═════╗
║  uid  ║    time    ║ id  ║
╠═══════╬════════════╬═════╣
║  001  ║  01:45:10  ║ 623 ║
║  004  ║  04:45:40  ║ 623 ║
║  005  ║  05:45:50  ║ 623 ║
║  002  ║  02:45:20  ║ 444 ║
║  003  ║  03:45:30  ║ 444 ║
║  006  ║  06:45:00  ║ 444 ║
╚═══════╩════════════╩═════╝

私が最も近いのはこれです:

select time, id from test group by id, time

    ╔═══════╦════════════╦═════╗
    ║  uid  ║    time    ║ id  ║
    ╠═══════╬════════════╬═════╣
    ║  002  ║  02:45:20  ║ 444 ║
    ║  003  ║  03:45:30  ║ 444 ║
    ║  006  ║  06:45:00  ║ 444 ║
    ║  001  ║  01:45:10  ║ 623 ║
    ║  004  ║  04:45:40  ║ 623 ║
    ║  005  ║  05:45:50  ║ 623 ║
    ╚═══════╩════════════╩═════╝

しかし、これは id による順序付けであるため、正確にはそうではありません。最初の '623' レコードが最初の '444' エントリの前にあるため、すべての '623' エントリを最初にリストする適切な構文が何であるかはわかりません。

助けてくれてありがとう。

答えを得ました:

SELECT test.time, test.id FROM
(
    (SELECT DISTINCT id FROM test ORDER BY time ASC) as distinct_test
    LEFT JOIN 
    test ON distinct_test.id = test.id
)

それは今見ても納得です。助けてくれてありがとう。

4

3 に答える 3

1

うーん?

SELECT time, id FROM test group by id, time order by id desc
于 2012-07-19T19:34:05.557 に答える
1

使用する必要があるコードは次のとおりです。あなたのデータでテストしたところ、うまくいきました。LEFT OUTER JOINaではなく aを使用する必要があることを除いて、基本的には Jason Swett のものと同じRIGHT OUTER JOINです。

SELECT t.id, t.time
FROM (SELECT DISTINCT id
      FROM `table`
      ORDER BY time ASC) distinct_t
LEFT OUTER JOIN `table` t ON distinct_t.id = t.id;
于 2012-07-19T19:34:29.070 に答える
1

何かのようなもの...

      SELECT test.id,
             test.time
        FROM (SELECT DISTINCT id
                FROM test
            ORDER BY time ASC) distinct_test
  RIGHT JOIN test ON distinct_test.id = test.id

それはうまくいかないかもしれませんが、少なくともあなたを道に導くかもしれません.

于 2012-07-19T19:15:18.953 に答える