Я продолжаю смотреть на этот запрос, который работает в хранимой процедуре, становясь более запутанным.Выберите последние 3 строки подряд
У меня есть таблица, которая выглядит, как это ...
AsofDate Database_Name Mirroring_Sate
DateTime Database1 Synchronized
DateTime Database2 Suspended
DateTime Database3 Disconnected
DateTime Database1 Synchronized
DateTime Database2 Synchronized
DateTime Database3 Disconnected
DateTime Database1 Synchronized
DateTime Database2 Synchronized
DateTime Database3 Disconnected
Так у меня есть работа, которая работает и записывает статус зеркального отображения в таблице 3 базы данных каждые 15 минут. Мне нужен запрос, который будет для любого имени базы данных для трех последовательных проверок, если статус зеркалирования не равен Synchronized.
Так что если, например, Database1 в 3 часа дня, то в 3,15 часа, то в 3.30 вечера был в отключенном состоянии, это то, что мне нужно знать. То, что я делаю в данный момент, просматривает всю таблицу, и если подсчет для какой-либо одной базы данных в состоянии, отличном от синхронизированного, равен 3 или более, я беру ацион, который не совсем то, что я хочу. Я только хочу сделать это для последних 3 проверок, и все.
Это мой вопрос в его нынешнем виде.
IF EXISTS (SELECT 1
FROM dbo.U_MirroringStatus WITH (NOLOCK)
where mirroring_state_desc <> 'SYNCHRONIZED'
GROUP BY database_name
HAVING COUNT(*) >= @MirroringStatusViolationCountForAlert
)
Любая помощь/совет будет велик. Спасибо заранее.
большое спасибо. Я в основном хочу сгруппировать проверку по имени базы данных. Запрос должен быть проверен для всех баз данных, а не для конкретного. Поэтому, если Database1 отключен, последние 3 проверки будут делать что-то – user2841861
Я обновил таблицу, чтобы вы могли видеть, как она выглядит. Таким образом, запрос должен возвращать базу данных 3, поскольку последние три проверки были отключены для этого db. – user2841861