2

関連する結果を返すために作成しようとしている MySQL クエリを誰かが手伝ってくれるのではないかと思います。

変更ログ データの大きなテーブルがあり、多数のレコード「グループ」を取得したいと考えています。たとえば、この場合、グループは、同じタイムスタンプを持つ 2 つ以上のレコードが入力された場所になります。

これがサンプルテーブルです。

==============================================
ID     DATA                         TIMESTAMP
==============================================
1      Some text                    1379000000
2      Something                    1379011111
3      More data                    1379011111
3      Interesting data             1379022222
3      Fascinating text             1379033333

最初の 2 つのグループ化されたセットが必要な場合は使用できますLIMIT 0,2が、これでは 3 番目のレコードが失われます。理想的なクエリでは、3 つの行が返されます (2 つの行のタイムスタンプが同じであるため)。

==============================================
ID     DATA                         TIMESTAMP
==============================================
1      Some text                    1379000000
2      Something                    1379011111
3      More data                    1379011111

現在、私はPHPを使用してテーブル全体を処理していますが、これはほとんど機能しますが、1000以上のレコードのテーブルでは、メモリ使用量があまり効率的ではありません!

あなたが与えることができるどんな助けにも前もって感謝します...

4

1 に答える 1

1

を使用してフィルタリングのタイムスタンプを取得しjoinます。たとえば、次の例では、2 番目のタイムスタンプが完了したグループにあることを確認します。

select t.*
from t join
     (select timestamp
      from t
      order by timestamp
      limit 2
     ) tt
     on t.timestamp = tt.timestamp;

以下は、サイズに関係なく、最初の 3 つのグループを取得します。

select t.*
from t join
     (select distinct timestamp
      from t
      order by timestamp
      limit 3
     ) tt
     on t.timestamp = tt.timestamp;
于 2013-09-12T18:58:27.173 に答える