• Запрос периода времени в течение дня?

    Vika7
    @Vika7 Автор вопроса
    alexalexes Алекс, доброго времени суток, спасибо Вам, просто БОЛЬШОЕ СПАСИБО за помощь, все ваши решения рабочие. И мое предложение на счет пива остается в силе, не имею привычку за бесплатно юзать людей, поэтому если передумаете, напишите в личку куда отправить вам мани.
    А у меня опять загвоздка. Пробовала использовать разные варианты ограничений о которых вы писали:

    select * from 
    (
     -- подзапрос интервалов
    ) a
    where
    -- исключение определенного перечня интервалов
     a.full_interval_number not in (0, 3, 7, 15)
    -- отбрасывание из выборки событий между 9 и 10 часами
    and TIME_TO_SEC(a.event_date) < TIME_TO_SEC('09:00:00') 
    and TIME_TO_SEC(a.event_date) > TIME_TO_SEC('10:00:00')


    все работает, все получается и в измененных вариантах тоже, таком как:

    where
      a.event_date not in (select time from time where status=0)


    Но в дальнейшем приходит понимание, что для моего проекта необходимы корректировки, а именно:

    1. изменить вывод временных интервалов. Ранее мы делали так:

    FROM (select STR_TO_DATE('01.06.2018 08:50:00', '%d.%m.%Y %H:%i:%s') event_date union all -- до дневного периода
          select STR_TO_DATE('01.06.2018 08:59:59', '%d.%m.%Y %H:%i:%s') event_date union all -- за секунду до начала дневного периода
          select STR_TO_DATE('01.06.2018 09:00:00', '%d.%m.%Y %H:%i:%s') event_date union all -- ровно на начале дневного периода первого интервала
          select STR_TO_DATE('01.06.2018 09:00:01', '%d.%m.%Y %H:%i:%s') event_date union all -- ровно после одной секунды в первом интервале дневного периода
          select STR_TO_DATE('01.06.2018 09:14:59', '%d.%m.%Y %H:%i:%s') event_date union all -- за секунду до окончания первого интервала
          select STR_TO_DATE('01.06.2018 09:15:00', '%d.%m.%Y %H:%i:%s') event_date union all -- начало второго интервала
          select STR_TO_DATE('01.06.2018 09:15:01', '%d.%m.%Y %H:%i:%s') event_date union all -- ровно после первой секунды второго интервала
          select STR_TO_DATE('01.06.2018 17:59:59', '%d.%m.%Y %H:%i:%s') event_date union all -- ровно за секунду до окончания дневного периода  
          select STR_TO_DATE('01.06.2018 18:00:00', '%d.%m.%Y %H:%i:%s') event_date union all -- ровно на границе дневного периода
          select STR_TO_DATE('01.06.2018 18:00:01', '%d.%m.%Y %H:%i:%s') event_date union all -- ровно секунда после дневного периода
          select STR_TO_DATE('01.06.2018 18:10:00', '%d.%m.%Y %H:%i:%s') event_date) t,


    здесь по каждому селекту мы получаем временной интервал с его порядковым номером и временными границами.

    Нужно вывести все временные интервалы с временными границами по порядку, к примеру по этому запросу:

    select STR_TO_DATE('01.06.2018 18:10:00', '%d.%m.%Y %H:%i:%s') event_date) t,


    вывод будет таким:

    2018-06-01 18:00:00 16 17:30:00 18:00:00


    а нужно:

    2018-06-01 18:00:00 1 09:00:00 09:30:00
    2018-06-01 18:00:00 2 09:30:00 10:00:00
    2018-06-01 18:00:00 3 10:00:00 10:30:00
    ...
    2018-06-01 18:00:00 16 17:30:00 18:00:00


    но не расписывая по каждому селекту

    для чего это нужно: в дальнейшем, что бы я смогла исключить определенный временной интервал (ну например занятый определенным действом), взятым из существующей моей другой таблицы, к примеру там занято 2 часа с 10 до 12 часов, тогда расчет будет таким (16- (4*0,30минут))=12, вывод таким:

    2018-06-01 18:00:00 1 09:00:00 09:30:00
    2018-06-01 18:00:00 2 09:30:00 10:00:00
    2018-06-01 18:00:00 3 12:00:00 12:30:00
    ...
    2018-06-01 18:00:00 12 17:30:00 18:00:00


    и Главное, этот запрос будет одним из множества других запросов, с разницей только в размере интервала. Запросу с часовым интервалом как и другим, также необходимо будет рассчитать количество интервалов с учетом занятого времени. Вот в этом думаю и кроется загвоздка почему нельзя расписывать каждый интервал отдельным селектом.
  • Запрос периода времени в течение дня?

    Vika7
    @Vika7 Автор вопроса
    alexalexes Ооооо...)) пошла разбираться
  • Запрос периода времени в течение дня?

    Vika7
    @Vika7 Автор вопроса
    alexalexes Алекс, добрый день. Как я и говорила возникают вопросы) Из моего ближайшего окружения никто не может помочь, поэтому если можно я вас буду доставать)) Вообщем дело в следующем: по нашему коду получение количества интервалов осуществляется в результате математических вычислений, а возможно ли присвоить каждому интервалу его временной отрезок? То есть интервал №1 временной отрезок 09.00 – 09.30 и тд. это в дальнейшем помогло бы мне в работе с ними.
  • SQL вычисляемый столбец?

    Vika7
    @Vika7 Автор вопроса
    В сервлете я стандартно пробегаю с помощью опреатора if ?

    ResultSet rs = ps.executeQuery();
            if (rs.next()) {
                //
            }


    в случае если у меня по всей таблицы одна строка со значением 7, таблица рисуется на клиенте?
  • Как оформить ответ на Объект XMLHttpRequest?

    Vika7
    @Vika7 Автор вопроса
    Сергей Горностаев Сергей, большое спасибо, за пример, есть некоторые вопросы к коду правильно ли я понимаю?
    private ResultSet fetchRows() {
    ...
    }
    - это мой SQL запрос, который я прописываю в отдельном классе.

    private JSONObject toJson(ResultSet rows) {
    ...
    }
    - это преобразование строки ResultSet в строку JSON, который также в отдельном классе прописываеться.

    в коде JavaScript data и response это переменные и видимо нужно их указать как var data и var response.
  • Как оформить ответ на Объект XMLHttpRequest?

    Vika7
    @Vika7 Автор вопроса
    Сергей Горностаев, Плиз, покажите это куском кода
    out.println(...)
    имеете ввиду?
  • Как оформить ответ на Объект XMLHttpRequest?

    Vika7
    @Vika7 Автор вопроса
    Сергей Горностаев, да, но метод getRequestDispatcher перезагрузит страницу, а у меня модель AJAX. Мне таблица без перезагрузки браузера нужна.
  • Хранение времени в БД?

    Vika7
    @Vika7 Автор вопроса
    Илья, как бы Вы составили структуру для ежедневника? С таблицами не работала, поэтому не знаю как правильно составить структуру таблиц.
  • Хранение времени в БД?

    Vika7
    @Vika7 Автор вопроса
    Начало и конец события - это две записи в таблице или два поля? Пытаюсь составить представление о правильной структуре таблиц.
  • Запрос периода времени в течение дня?

    Vika7
    @Vika7 Автор вопроса
    alexalexes, тьфу блин, не сообразила, играла с подзапросом интервалов, думала в нем проблема. Как правило, если что-то не догоняю, то метод научного тыка спасает, но не тут. Освоение SQL пошло немного труднее чем я думала, раньше считала, что язык ограничивается CRUD, а нет... За ваше терпение могу угостить вас пивом, скиньте kiwi кошелек. и видимо у меня еще вопросы будут.
  • Запрос периода времени в течение дня?

    Vika7
    @Vika7 Автор вопроса
    alexalexes, сорри за тупой копипаст вашего кода, консоль выходит ошибку и не компилируется:

    FOR, GROUP, HAVING, INTO, LIMIT, LOCK, ORDER, PROCEDURE, UNION or '[' expected, got 'a'

    [42000][1064] You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'a.full_interval_number not in (1,3) -- включить в выборку т' at line 28


    Код сделала так:
    SELECT * FROM
        (
          SELECT
            t.event_date,
            CASE
            WHEN TIME_TO_SEC(t.event_date) > inter.begin AND TIME_TO_SEC(t.event_date) < inter.end
              THEN floor((TIME_TO_SEC(t.event_date) - inter.begin) / inter.width)
            WHEN TIME_TO_SEC(t.event_date) <= inter.begin
              THEN 0
            WHEN TIME_TO_SEC(t.event_date) >= inter.end
              THEN floor((inter.end - inter.begin) / inter.width)
            ELSE NULL
            END AS full_interval_number
          FROM table t,
            (SELECT
               TIME_TO_SEC('09:00:00') AS begin,
               TIME_TO_SEC('18:00:00') AS end,
               TIME_TO_SEC('00:15:00') AS width
            ) inter
      )
    a
    where
    -- отбрасывание из выборки событий между 9 и 10 часами
    TIME_TO_SEC(a.event_date) < TIME_TO_SEC('09:00:00')
    and TIME_TO_SEC(a.event_date) > TIME_TO_SEC('10:00:00')
    
    -- исключение определенного перечня интервалов
    a.full_interval_number not in (1,3)
    
    -- включить в выборку только интервалы  1 <  full_interval_number < 10
    a.full_interval_number > 1
    and a.full_interval_number < 10


    Проверка Alt + Enter предлагает сменить диалект, меняю на mysql, но результатов не дает

    Где я косиканула?
  • Запрос периода времени в течение дня?

    Vika7
    @Vika7 Автор вопроса
    alexalexes, по ходу возникают вопросы, гугление результатов не дало, поэтому возвращаюсь к Вам) из вашего кода как можно ли обратиться к определенному интервалу (ну например в отрезок №1 - с 900 - 10.00 записать в него что-то) и второй вопрос если какие-нибудь исключение для интервалов, то есть временной отрезок №1 . 9.00-10.00 исключить из количества интервалов?
  • Запрос периода времени в течение дня?

    Vika7
    @Vika7 Автор вопроса
    alexalexes, спасибо буду пробовать
  • Запрос периода времени в течение дня?

    Vika7
    @Vika7 Автор вопроса
    Rsa97, в SQL не работаю, но по случаю приходиться в этом разбираться, не могли бы Комменты к коду указать по неповторяющимся строкам, для его понимания, было бы отлично простыми словами)
  • Запрос периода времени в течение дня?

    Vika7
    @Vika7 Автор вопроса
    alexalexes, Ваш код действующий, решение вопроса однозначно, но есть один момент во времени 17.01.00 период в 1 минуту засчитывает за установленный период. Как сделать чтобы считались только полные периоды, так сказать сокращение на убывание или это меняет полностью структуру запроса?
  • Запрос периода времени в течение дня?

    Vika7
    @Vika7 Автор вопроса
    alexalexes, я совсем невежда в SQL. Не могли бы к первым 4 строкам комменты указать
  • Цикл в запросе БД?

    Vika7
    @Vika7 Автор вопроса
    Указала в примере строковые, а вообще цифры. Все таки считаете битовые операции актуальнее. По ним смотрела и мануалы и примеры, но немного недопонимаю я их
  • HTTP Status 500 cannot be cast to?

    Vika7
    @Vika7 Автор вопроса
    курить мат часть времени не было) решила, так:
    String userId = request.getParameter("userId");
                dao.getAllUsersM(userId);
                forward = INSERT_OR_EDITB;
                request.setAttribute("users", dao.getAllUsersM(userId));
  • HTTP Status 500 cannot be cast to?

    Vika7
    @Vika7 Автор вопроса
    Денис Загаевский, боюсь показаться невеждой, убрав Cast к объекту idea дает ошибку

    5a9bf6df72b42645738465.png