Üretim ortamına konuşlandırılan opensips'lerim var ve binden fazla kullanıcı kayıtlı ve her SIP Telefon kayıt işlemini 1 dakika sonra yeniliyor. Yumuşak telefonun her kaydı için location_history tablosuna bir satır ekleyen bir tetik yazdım. Tablo registration_history her yudum kullanıcısının kayıt kaydını tutuyor. Konumu tarihin açıklamasıdır:MySQL sorgusu saat başına azami sürenin dışında kalan tüm verileri silmek için
id int (10) imzasız adı Char (64)
alanı Char (64)
temas Char (255)
alınan karakter (128)
yol Char (255)
tarih saat
q şamandıra (10,2)
CallID kömür (255)
cseq int (11)
last_modified başlangıç tarihi
sonabayrakları (11)
derleme-kömür (255)
user_agent kömür (255)
soket karakter (64)
yöntem int (11)
sip_instance kömür (255)
attr kömür (255)
Şimdi, registration_history'de bir saat içinde azami süresiyle sadece bir kayıt tutmak ve geri kalanını silmek istiyorum. Lütfen bana bunu nasıl yapacağım konusunda yönlendirin. @tommcatt tarafından this ileti dizisinde önerilen sorgulamayı takip ettim ancak yine de veritabanında bir saatin birden fazla kaydı var. Sorgum:
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'
Bu Sorgu, her gün bir cron içinde yürütülür, ancak benim gereksinimime göre çalışmaz. Uygulamadan sonra bir saat içinde hala birden fazla kayıt var.
'Mysql:
saatte sadece bir kayıt istiyorsanız, alt sorgu
username
kaldırmak '<> SQL Server '. Kullandığınız birini seçin –