2

次のようなテーブルがあります。

ID  | Time  | Metadata
======================
1   | 01:00 | Foo
2   | 02:00 | Foo
3   | 03:00 | Foo
4   | 04:00 | Bar
5   | 05:00 | Bar
6   | 06:00 | Bar
7   | 07:00 | Foo
8   | 08:00 | Foo
9   | 09:00 | Foo
10  | 10:00 | Foo
11  | 11:00 | Foo
12  | 12:00 | Foo

次のように、メタデータ変更の最初のインスタンスをすべて取得したいと思います。

ID  | Time  | Metadata
======================
1   | 01:00 | Foo
4   | 04:00 | Bar
7   | 07:00 | Foo

GROUP BY行1と7をグループ化しますが、これは私が望むものではありません。SQL の外でそれを行うこともできますが、それには避けたいデータのかなり大きな選択が必要になります。

4

3 に答える 3

0

ストアド プロシージャを作成し、その中で「メタデータ変更」ロジックを実行するのが最も簡単だと思います。ストアド プロシージャは、必要なセットにカーソルを返します。この方法では、大量のデータをクライアントにフェッチせず、クライアントで処理を行います。

于 2013-08-08T17:49:42.843 に答える
0

もう1つのアプローチ

SELECT id, `time`, metadata
FROM 
(select @cnt := 0, @previous := '' from dual) dummy
join (

  SELECT  id, `time`,
      metadata, @cnt := IF(metadata = @previous, @cnt + 1, 1) occurence,
      @previous := metadata FROM trytable

) a where occurence = 1;

デモはこちら

于 2013-08-08T18:18:04.823 に答える