SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 24.12.2016 20:12:39

drkrol
Участник
Зарегистрирован: 24.12.2016
Сообщений: 2

Как перевести mssql запрос в mysql ?

Здравствуйте. Есть вот такой mssql запрос:


DECLARE @START DATE = '2016-12-12'; -- Новая дата заезда
DECLARE @END DATE = '2016-12-20'; -- Новая дата выезда
DECLARE @today DATE = '2016-12-11';
 
UPDATE  main
SET     numbernomer = NULL
WHERE   datestart > @today;
 
DECLARE @mainnumber INT;
 
while EXISTS (SELECT * FROM main WHERE numbernomer IS NULL)
BEGIN
 
    SELECT top(1) @mainnumber = id
    FROM    main
    WHERE   numbernomer IS NULL
    ORDER BY datestart ASC, datediff(DAY, datestart, dateend) DESC;
 
    UPDATE m0
    SET     numbernomer = m1.nomer
    FROM    main m0
            CROSS apply (SELECT top 1 a.nomer
                        FROM    allnomer a
                                LEFT JOIN main m
                                ON a.nomer = m.numbernomer
                                AND DATEDIFF(DAY, m.datestart, m0.dateend) * DATEDIFF(DAY, m.dateend, m0.datestart) <= 0
                                LEFT JOIN (SELECT m2.numbernomer, MAX(m2.dateend) AS dateend FROM main m2 GROUP BY m2.numbernomer) AS m2
                                        ON a.nomer = m2.numbernomer
                        WHERE a.TYPE = 'lux' AND m.numbernomer IS NULL
                        ORDER BY datediff(DAY, m2.dateend, m0.datestart), a.nomer
                        ) AS m1
    WHERE   m0.id = @mainnumber;
 
END;
 
SELECT a.nomer
FROM allnomer a
LEFT JOIN main m
  ON a.nomer = m.numbernomer
  AND DATEDIFF(DAY, m.datestart, @END) * DATEDIFF(DAY, m.dateend, @START) <= 0
WHERE a.TYPE = 'lux' AND m.numbernomer IS NULL;
 


Подскажите пожалуйста, что нужно изменить, чтобы этот запрос работал в mysql? Я, кроме того, что нужно decale на set поменять и тип данных убрать, ничего не знаю. Прошу вашей помощи
P.S. Запрос должен будет выполняться в этой таблице: http://sqlfiddle.com/#!9/81225

Неактивен

 

#2 24.12.2016 21:00:20

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Как перевести mssql запрос в mysql ?

у вас тут несколько запросов.
если речь про весь фрагмент, то его можно сделать только в виде процедуры (там разрешены циклы)
см примеры в доке

Неактивен

 

#3 25.12.2016 15:58:38

drkrol
Участник
Зарегистрирован: 24.12.2016
Сообщений: 2

Re: Как перевести mssql запрос в mysql ?

vasya написал:

у вас тут несколько запросов.
если речь про весь фрагмент, то его можно сделать только в виде процедуры (там разрешены циклы)
см примеры в доке

Я вижу, что здесь несколько запросов))) Но у меня проблема только с циклом. Посмотрел документацию... Эх... Дремучий лес.
Я уже много чего прочёл, но при попытке реализовать, всё равно - ошибка на ошибке. Поэтому и обратился на форум к вам.
По сути этот код должен перераспределить базу данных. Есть даты бронирования номеров в гостинице и они разбросаны хаотично. Цель запроса - дефрагментовать бд.
Превратить вот это:
https://pp.vk.me/c837321/v837321643/112b5/JTx5MpRw4-c.jpg
Вот в это
https://pp.vk.me/c837321/v837321643/112be/-25Xdg-xnig.jpg

Отредактированно drkrol (25.12.2016 17:20:26)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson