Требуется дополнить существующую программу на C# с использованием WinForms и SQL для отдела кадров. Необходимо добавить функционал изменения записей и другие функции, присущие отделу кадров. Основные операции уже реализованы: добавление, удаление и выборка данных.
Mysql Сделать хранимую процедуру быстрее
Я в sql не сильно разбираюсь, написал такую хранимку. Хорошо бы ее сделать быстрее и эффективнее, если это возможно.
Есть числа в базе данных. Нужно рассчитать максимальную серию не выпадения.
Пример
Числа: 0 0 0 0 1 2 1 1 2 3 4 5 5 6 5 6 6 6 1
Макс серия не выпадения
0-15
1-10
2-10
3-9
4-10
5-11
6-13
Логика рассчета:
К примеру, 0 - мы видим что он выпадает 4 раза подряд, и после не выпадает - значит считаем количество с последнего выпадения нуля и до конца.
К примеру 4 - мы видим что количество до первого выпадения 4 больше, чем количество цифр после 4 - значит записываем первое количество.
Таблица:
id bigint
result int
date datetime
Используется mysql
Сама хранимка ниже.
И вопрос такой, где лучше считать, на стороне SQL или PHP. Важна скорость расчетов
DELIMITER $
CREATE DEFINER=`root`@`localhost` FUNCTION `CalculateStreakOfNonDropouts`(`number` INT, `beginDate` DATETIME, `endDate` DATETIME) RETURNS int(11)
BEGIN
DECLARE dates INT;
DECLARE currentIndex INT;
DECLARE nextIndex INT;
DECLARE maxSeries INT;
DECLARE tmpSeries INT;
DECLARE firstIteration INT;
SET firstIteration = 0;
SET tmpSeries = 0;
SET currentIndex = -1;
SET nextIndex = 0;
SET maxSeries = 0;
SET dates = (SELECT COUNT(`date`) FROM `rolls` WHERE `result`=number AND `date`>=(SELECT beginDate) AND `date`
IF dates=0 THEN
SET maxSeries = (SELECT COUNT(`result`) FROM `rolls` WHERE `date`>=(SELECT beginDate) AND `date`
ELSEIF dates=1 THEN
SET tmpSeries = (SELECT COUNT(`result`) FROM `rolls` WHERE `result`!=number and `date`>=(SELECT `date` FROM `rolls` WHERE `result`=number AND `date`>=(SELECT beginDate) AND `date`
SET maxSeries = (SELECT COUNT(`result`) FROM `rolls` WHERE `result`!=number and `date`=(SELECT beginDate) AND `date`=(SELECT beginDate));
IF tmpSeries>maxSeries THEN
SET maxSeries=tmpSeries;
END IF;
ELSE
loop_1: WHILE currentIndex
IF firstIteration=0 THEN
SET maxSeries=(SELECT COUNT(`result`) FROM `rolls` WHERE `result`!=number AND `date` BETWEEN (SELECT beginDate) AND (SELECT `date` FROM `rolls` WHERE `result`=number AND `date`>=(SELECT beginDate) AND `date`
SET firstIteration=1;
END IF;
SET currentIndex=currentIndex+1;
SET nextIndex=nextIndex+1;
IF nextIndex=dates THEN
set tmpSeries=(SELECT COUNT(`result`) FROM `rolls` WHERE `result`!=number AND `date` BETWEEN (SELECT `date` FROM `rolls` WHERE `result`=number AND `date`>=(SELECT beginDate) AND `date`
ELSE
SET tmpSeries=(SELECT COUNT(`result`) FROM `rolls` WHERE `result`!=number AND `date` BETWEEN (SELECT `date` FROM `rolls` WHERE `result`=number AND `date`>=(SELECT beginDate) AND `date`=(SELECT beginDate) AND `date`
END IF;
IF tmpSeries>maxSeries THEN
SET maxSeries=tmpSeries;
END IF;
END WHILE;
END IF;
RETURN maxSeries;
END$
DELIMITER ;
Заявки фрилансеров
Похожие заказы
- Базы данных1 заявкаЗакрыт4 года назад
- $250
Требуется разработать сервис выгрузки отчетов для системы олимпиад на Node.js и Vue.js. Реализовать фоновую выгрузку, чтобы пользователь мог продолжать работу во время обработки. Использовать Redis для фоновых процессов и веб-сокеты для уведомлений о готовности выгрузки. Необходимо также отрефакторить существующий метод выгрузки для улучшения читаемости и исправления багов.
Базы данныхнет заявокЗакрыт4 года назад Требуется переписать запрос MySQL, использующий конструкцию ON DUPLICATE KEY UPDATE, для корректной работы в PostgreSQL. Необходимо учесть различия в синтаксисе и функционале между этими СУБД.
Базы данныхнет заявокЗакрыт4 года назадЗадача заключается в расчете максимальной серии не выпадения чисел в базе данных MySQL. Необходимо проанализировать данные из таблицы с полями id, result и date. Пример данных представлен для понимания проблемы. Рассмотрены различные серии и их максимальные значения.
Базы данныхнет заявокЗакрыт4 года назадНеобходимо разработать веб-приложение на Java или C#, связанное с базой данных MS SQL Server или Oracle. Приложение должно отображать таблицу Movies с возможностью фильтрации, а также позволять покупку игр и редактирование таблицы Orders через отдельный интерфейс. Подробное задание и SQL-файл для создания БД предоставлены.
Базы данных1 заявкаЗакрыт4 года назадСеть стриптиз-клубов ищет PHP программиста на удаленную работу с зарплатой 1200-1400 USD. Требуется опыт в PHP, ООП, HTML, CSS и JavaScript, знание MySQL и навыки работы с фреймворком Laravel. График работы с 11:00 до 20:00 (Москва, Киев).
Базы данных15 заявокЗакрыт4 года назадНеобходим отчет из БД Firebird для печати каждой отгрузки бетона, включая несколько замесов по выбранному рецепту. Требуется использование IBExpert или Report Manager для формирования печатной формы. Пример живой БД доступен по запросу.
Базы данных1 исполнительЗавершен4 года назад- $5
Требуется спарсить каталог Авито и собрать урл всех разделов. Результат должен быть представлен в формате Excel с разбивкой по столбцам и строкам для удобной выборки урл из нужных категорий и разделов.
Базы данных1 заявкаЗакрыт4 года назад Требуется составить техническое задание для дополнительных модулей в существующей базе данных. Учитывайте кратчайшие сроки выполнения задачи. Ожидается четкое и полное описание требований к модулям.
Базы данных1 заявкаЗакрыт4 года назадТребуется разработать парсер Facebook с возможностью выгрузки данных в Excel-файл. Ожидается сбор информации о друзьях и подписчиках, включая ФИО, ссылки на профили, email, дату рождения, город и мобильный телефон. Также нужно учитывать лайки и комментарии под постами, а также посты с указанными тегами и хештегами.
Базы данныхнет заявокЗакрыт4 года назад