MySQL заявка

alexer

Active Member
Здравейте, има ли хора "на ти" с MySQL? :)
Дали ще може едно рамо за SQL заявка, която намира свободното време между въведени ангажименти:
sqlfiddle.com/#!9/ebb59/1

Проблемът е, че е е доста ретро - работи само в sqlfiddle.com на MySQL 5.6, но я няма никаква в xampp - дава напълно грешни резултати. :)
 
Последно редактирано от модератор:
sqlfiddle.com/#!9/ebb59/185
Ползвай това за основа
 
Последно редактирано от модератор:
Добро утро!
Да, това работи супер, но не знам как да го използвам.
Трябва ми да вади свободното време между записаните ангажименти.
 
Това е странно, ако не може в по-нова версия, а в 5.6 да е било възможно
 
Пусни малко повече входна информация:
1. mariaDB, Mysql, Percona
2. version
3. sql query structure
4. error message или грешен резултат.

Все трябва да се тръгне от някъде в посока reverse engineering
 
А, сега, тук ме хвана с тези въпроси. :)

Ами накратко, този sql код го намерих случайно в тази тема
и точно такова нещо ми трябваше, но като го пробвах на локалхост с xampp, вади различни резултати от sqlfiddle.com.

В localhost вади тези резултати - local.png (грешни).
А в sqlfiddle.com си вади точните - sqlfiddle.png (правилни).

Също го тествах и в споделен хостинг (superhosting.bg) и вади еднакви резултати с локалхост (грешните). Пробвах с InnoDB и MyISAM, но - същото.
В хостинга пише, че версията е тази MySQL Version / 10.3.32-MariaDB-log.
Предполагам, че SQL заявката е нещо невалидна за по-новите системи, но не знам кое й е грешно.
 

Прикачени файлове

  • local.png
    local.png
    8.1 KB · Преглеждания: 6
  • sqlfiddle.png
    sqlfiddle.png
    176.1 KB · Преглеждания: 6
SQL:
SELECT AvailStartTime, AvailEndTime
FROM (
    SELECT @lastEndTime as AvailStartTime, StartTime as AvailEndTime, @lastEndTime := EndTime
    FROM (SELECT StartTime, EndTime
          FROM Events
          WHERE Pers_ID = 6
            AND EndTime >= '2013-09-21 09:00'
            AND StartTime < '2013-09-21 22:00'
          ORDER BY StartTime) as e
          join (SELECT @lastEndTime := '0000-00-00 00:00:00') as timeX
      order by AvailEndTime
) as x
where AvailEndTime > DATE_ADD(AvailStartTime, INTERVAL 5 MINUTE)
 
SQL:
SELECT AvailStartTime, AvailEndTime
FROM (
    SELECT @lastEndTime as AvailStartTime, StartTime as AvailEndTime, @lastEndTime := EndTime
    FROM (SELECT StartTime, EndTime
          FROM Events
          WHERE Pers_ID = 6
            AND EndTime >= '2013-09-21 09:00'
            AND StartTime < '2013-09-21 22:00'
          ORDER BY StartTime) as e
          join (SELECT @lastEndTime := '0000-00-00 00:00:00') as timeX
      order by AvailEndTime
) as x
where AvailEndTime > DATE_ADD(AvailStartTime, INTERVAL 5 MINUTE)
Вложени заявки, нееееееее

good-morning-sunshine.gif
 
И аз не съм им фен, но другите варианти са с няколко заявки и временни таблици или последваща обработка.
 

Горе