日付と時刻が 2 つの列に分かれていると非常に煩わしいので、やむを得ない技術的な理由がない限り、これは避けたいと思います。
ちょっとした問題に関しては、必要なのは、UNIQUE
制約を適用できる列です。最も簡単な方法は、分のシリアル、または 60 で割った秒単位のエポック時間を使用することです。
epoch_minute
typeという名前の列を追加し、それにインデックス制約INT
を与えて、UNIQUE
その値に相当する値を入力します。INSERT IGNORE
次に、またはタイプのトリガーを使用して、INSERT ... ON DUPLICATE KEY
1 分あたりの繰り返しを処理できます。これは、1 分ごとに最初のレコードを保持するか、最後のレコードを保持するかによって異なります。
UNIX_TIMESTAMP()
関数を使用して古い値を移行できます。
UPDATE table_name SET epoch_minute = UNIX_TIMESTAMP(date_column) / 60
例として、 というテーブルが与えられた場合table_name
、一意の列制約を持つ値を受け取る新しいテーブルを準備します。
CREATE TABLE _table_name LIKE table_name;
ALTER TABLE _table_name ADD COLUMN epoch_minute INT;
CREATE UNIQUE INDEX index_table_name_epoch_minute ON _table_name (epoch_minute);
INSERT IGNORE
次に、重複をスキップするために使用できます。
INSERT IGNORE INTO _table_name (column_a, column_b, epoch_minute)
SELECT column_a, column_b, UNIX_TIMESTAMP(date_column) / 60
FROM table_name;
最後に、テーブルをスワップします。
RENAME TABLE table_name TO table_name_old, _table_name to table_name;