0

私はデータベース(mysql)に次のような文字列を持っています:

{"StateId":73,"CallTime":"\/Date(1336365498912+0500)\/","CallId":"1336365489.14157","Target":"agi://127.0.0.1"}},"Profile":{"$type":"DataWriter.DbProfile, DataWriterObjects","Name":"DataService","Provider":"mssql","ConnectionString":"Data Source=localhost\\mydb; Database=mydb; User Id=sa; Password=admin;"}}

文字列は、複数のフィールドを含むJSONオブジェクトです。問題は、データベースから削除したい重複行が複数あることです。CallIdStateIdが同じであるが、CallTimeが異なる場合、行は重複していると見なされます。したがって、最初に、 CallIdが同じである行の重複(GROUP BY)のリストを取得し、 CallTimeの違いを無視します。以下のレコードのCallTimeは最初のレコードとは異なりますが、 CallIdは同じであるため、重複していると見なされます(基本的に、重複している場合はCallTimeを考慮する必要はありません) 。

{"StateId":73,"CallTime":"\/Date(1336365498913+0500)\/","CallId":"1336365489.14157","Target":"agi://127.0.0.1"}},"Profile":{"$type":"DataWriter.DbProfile, DataWriterObjects","Name":"DataService","Provider":"mssql","ConnectionString":"Data Source=localhost\\mydb; Database=mydb; User Id=sa; Password=admin;"}}

では、どうすればGROUP BYを実行できますか?基本的に、GROUP BYのすべては、CallTime値を無視して一致する必要があります。

テーブル構造は

mysql> describe Statements;

+------------+-------------+------+-----+---------+----------------+
| Field      | Type        | Null | Key | Default | Extra          |
+------------+-------------+------+-----+---------+----------------+
| SequenceId | bigint(10)  | NO   | PRI | NULL    | auto_increment |
| Profile    | varchar(32) | YES  | MUL | NULL    |                |
| CacheItem  | text        | NO   |     | NULL    |                |
+------------+-------------+------+-----+---------+----------------+

その後、重複を削除したいと思います。誰かが私を助けてくれますか?

4

1 に答える 1

1

あなたのデータベースは十分にアトミックではないと思います、あなたはあなたのJSON文字列を別々のフィールドに分割しなければならないかもしれません

于 2012-05-08T06:26:50.637 に答える