オープン環境でプロダクション環境が導入され、1000人以上のユーザーが登録されています。私は、ソフトフォンの登録ごとにlocation_historyテーブルに行を挿入するトリガーを作成しました。表registration_historyは、すべてのSIPユーザーの登録レコードを保持しています。ロケーション履歴の説明である:MySQLのクエリで、1時間あたりの最大時間を除くすべてのデータを削除します。
のID INT(10)符号なし ユーザ名CHAR(64)
ドメインCHAR(64)
接触CHAR(255)
受信CHAR(128)
パスチャー(255 )
日時
Qフロート(10,2)
callid CHAR(255)
のCSeq INT(11)
LAST_MODIFIED日時
満了のフラグINT(11)
CFLAGS CHAR(255)
user_agentのチャー(255)
ソケットCHAR(64)
方法はint(11)
sip_instanceチャー(255)
ATTRチャー(255)
今、registration_historyで1時間の最大有効期限を持つレコードを1つだけ保持し、残りのレコードを削除したいとします。私にこれを行う方法を教えてください。 @tommcattによって提案されたクエリをthisスレッドで追跡しましたが、依然としてデータベースに1時間の複数のレコードがあります。私の照会は:
DELETE ENTRY FROM location_history ENTRY
LEFT JOIN(
SELECT username, Date(expires) TheDate, Hour(expires) TheHour, Max(expires) MaxTime
FROM location_history WHERE expires BETWEEN '2016-03-26 00:00:00' and '2016-03-27 00:00:00'
GROUP BY username, TheDate, TheHour
) AS T1
ON T1.MaxTime = ENTRY.expires
WHERE T1.MaxTime is null AND ENTRY.expires BETWEEN '2016-03-26 00:00:00' and '2016-03-27 00:00:00'
このクエリーは毎日cronで実行されますが、自分の要件に従って動作しません。実行後、1時間に複数のレコードが残っています。
'MySQLの:
あなたは時間あたり1つのレコードだけをしたい場合は、サブクエリから
username
を削除'<>' SQL Server'です。 –