Sql server: обчислюємо попереднє і наступне значення з умовою. Рішення з віконними функціями

Відео: Підрахунок унікальних записів діапазону в Excel

SQL Server: обчислюємо попереднє і наступне значення з умовою. Рішення з віконними функціями
Це завдання можна вирішити з використанням віконних функцій, склавши план зі значно меншим числом операцій читання. Перш за все, слід обчислити значення gooddt, що представляє поточну дату, для якої значення опадів перевищує 24 (NULL в іншому випадку). Потім обчисліть prevdt з використанням віконної функції МАХ, застосовуваної до gooddt, з кадром ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING. Аналогічно, обчисліть nextdt з використанням віконної функції MIN, застосовуваної до gooddt, з кадром ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING. Решта - так само, як в попередньому рішенні. У коді, представленому нижче, наводиться повний запит рішення.

SQL Server: обчислюємо попереднє і наступне значення з умовою. Рішення з віконними функціями
Рішення з віконними функціями

SQL Server: обчислюємо попереднє і наступне значення з умовою. Рішення з віконними функціями
План для вирішення з віконними функціями




Для даного запиту діє план, показаний на скріншоті, представленому вище. Для виконання цього запиту потрібна була 51 секунда (і 33 секунди при обчисленні тільки diffprev). Однак важливо, що число операцій читання зменшилася на три порядки величини, до 64769 (з огляду на пов`язані зі скиданням відсортованих даних в tempdb). Таким чином, цей запит породить набагато меншу конкуренцію за ресурси введення-виведення в середовищі з численними одночасно виконуваними запитами.




Для подальшої оптимізації можна скористатися прийомом паралельного CROSS APPLY Адама Маханіка. Ви направляєте запит до таблиці Locations і за допомогою оператора CROSS APPLY застосовуєте логіку рішення до одного місця перебування. Цей прийом зазвичай покращує паралельну обробку і розбиває такі операції, як сортування, які більш лінійно масштабуються в численні дрібні операції, в цілому виконуються з більшою продуктивністю.

SQL Server: обчислюємо попереднє і наступне значення з умовою. Рішення з віконними функціями
Логіка інкапсуляції для одного пункту у вбудованій функції з табличним значенням

Для реалізації даного методу спочатку скористайтеся програмним кодом, представленим вище, щоб инкапсулировать логіку рішення для одного пункту у вбудованій функції з табличним значенням.




ІНШЕ

Sql server: пошук або сканування фото

Sql server: пошук або сканування

демонстраційні дані Демонстраційні дані для статті сформовані за допомогою коду, наведеного нижче. Код для створення…

» » Sql server: обчислюємо попереднє і наступне значення з умовою. Рішення з віконними функціями