powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / вывод количества суток, в которых квартира была занята посетителями
16 сообщений из 41, страница 2 из 2
вывод количества суток, в которых квартира была занята посетителями
    #38739903
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадядля предложенных данных
Код: sql
1.
2.
3.
4.
SELECT 
SUM(  TIMESTAMPDIFF(HOUR, xxx.datefrom, xxx.dateto) +24)div 24 AS expr1
FROM
  xxx


возврвщает 5
есть больший набор реальных данных?

прибавить число и взять отсаток это быстрее, чем ceil()???
...
Рейтинг: 0 / 0
вывод количества суток, в которых квартира была занята посетителями
    #38739919
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumixвадядля предложенных данных
Код: sql
1.
2.
3.
4.
SELECT 
SUM(  TIMESTAMPDIFF(HOUR, xxx.datefrom, xxx.dateto) +24)div 24 AS expr1
FROM
  xxx


возврвщает 5
есть больший набор реальных данных?

прибавить число и взять отсаток это быстрее, чем ceil()???
тут несколько другое подразумевалось...
...
Рейтинг: 0 / 0
вывод количества суток, в которых квартира была занята посетителями
    #38739928
andrew_jr20
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lumixandrew_jr20Lumix,

вот рабочий вариант того запроса, попробовал уже разнообразные периоды - всегда как надо считает, спасибо за наводку :)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select room_id, count(ss_id) as sut from 
(
    select ss_id, room_id 
	from reservations d join sprav_sut s 
	on ((s.df between d.reservation_start and d.reservation_end or s.dt between d.reservation_start and d.reservation_end) or (s.df < d.reservation_end and s.dt > d.reservation_start))  
        group by s.ss_id
) t 
group by room_id


внимание, ловушка!!!)))
этот запрос не учитывает квартиры, которые были сданы на несколько часов в течение одних суток)))

например такую
Код: sql
1.
2.
id    idapartment    datefrom           dateto
1     5              07.09.14 10:00     07.09.14 19:00



а решение на секвенсорах учитывает 16546051 ...

Всё учитывает - для этого последнее условие в ON :) Только что ещё раз перепроверил :) На секвенсорах так и не попробовал, может и правда шустрее будет - там же тоже надо дополнительную таблицу-справочник?
...
Рейтинг: 0 / 0
вывод количества суток, в которых квартира была занята посетителями
    #38739953
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяLumixпропущено...


прибавить число и взять отсаток это быстрее, чем ceil()???
тут несколько другое подразумевалось...

я имел ввиду [ (hours + 24) div 24 ] vs [ ceil(hours / 24)]
...
Рейтинг: 0 / 0
вывод количества суток, в которых квартира была занята посетителями
    #38739967
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrew_jr20На секвенсорах так и не попробовал, может и правда шустрее будет - там же тоже надо дополнительную таблицу-справочник?

да, потому что в мускуле нет встроенного генератора, поэтому приходится их самим явно мутить через таблицу, кстати, можно даже временную в памяти...
...
Рейтинг: 0 / 0
вывод количества суток, в которых квартира была занята посетителями
    #38739979
andrew_jr20
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lumixandrew_jr20На секвенсорах так и не попробовал, может и правда шустрее будет - там же тоже надо дополнительную таблицу-справочник?

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

Чего-то не пашет, пустой набор выдаёт, какие бы входные данные ни были.. И въехать не могу - в чём сакральный смысл 10e5? :)
...
Рейтинг: 0 / 0
вывод количества суток, в которых квартира была занята посетителями
    #38739989
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumixвадяпропущено...

тут несколько другое подразумевалось...

я имел ввиду [ (hours + 24) div 24 ] vs [ ceil(hours / 24)]
я просто логигу искал....тот пример, когда оптимизация пофиг...
...
Рейтинг: 0 / 0
вывод количества суток, в которых квартира была занята посетителями
    #38740038
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяLumixпропущено...


я имел ввиду [ (hours + 24) div 24 ] vs [ ceil(hours / 24)]
я просто логигу искал....тот пример, когда оптимизация пофиг...

я про скорость вопрос задавал не про относительно оптимизации этого примера, а просто на будущее знать опасен ли ceil(), потому что у нас во всех проектах используется именно он и если бы стало известно что ceil() дороговат в использовании относительно сложить и взять остаток, то я бы добавил этот пункт в правила написания кода в будущих проектах
...
Рейтинг: 0 / 0
вывод количества суток, в которых квартира была занята посетителями
    #38740042
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrew_jr20Lumixпропущено...


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

Чего-то не пашет, пустой набор выдаёт, какие бы входные данные ни были.. И въехать не могу - в чём сакральный смысл 10e5? :)

дарю тебе весь тестовый пример с нуля до результата

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
create table some (id int auto_increment, idap int, df datetime, dt datetime, primary key(id));
insert into some (idap, df, dt) values 
(1, '14.09.07 10:00',  '14.09.10 10:00')
, (1, '14.09.10 19:00',  '14.09.11 10:00')
, (2, '14.09.05 10:00',  '14.09.12 10:00')
, (2, '14.09.14 19:00',  '14.09.17 10:00')
, (4, '14.09.07 10:00',  '14.09.07 11:00')
, (4, '14.09.10 19:00',  '14.09.10 21:00');

create table bree (i int auto_increment, primary key(i));
insert into bree values (), (), (), (), (), (), (), (), (), (), (), (), (), ();

select idap, count(cnt) as cnt from
(
    select distinct stayday as cnt, idap from
    (
        select 
        idap
        , if ((unix_timestamp(date(d.dt)) -  unix_timestamp(date(d.df)) - 60 * 60 * 24 * (s.i - 1)) >= 0, date(d.df + 10e5 * (s.i - 1)), 0) stayday
        from some d, bree s 
        
    ) t1
    where stayday > 0
) t2
group by 1;



должно получится

Код: sql
1.
2.
3.
4.
idap	cnt
1	5
2	12
4	2



где именно расхождение с твоей реализацией этого подхода ищи сам
...
Рейтинг: 0 / 0
вывод количества суток, в которых квартира была занята посетителями
    #38740049
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrew_jr20И въехать не могу - в чём сакральный смысл 10e5? :)

этот сакральный смысл передается только от учителя к ученику, когда он достигнет истинных высот профессионализма и будет готов к принятию подлинно сущности мускуля...)))))))))))
...
Рейтинг: 0 / 0
вывод количества суток, в которых квартира была занята посетителями
    #38740085
andrew_jr20
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lumix,

дяяядь, ну что за 10e5? :)) гугл молчит, и сам я такое первый раз вижу :)
а с полной реализацией завтра посмотрю, в чём там различия - только что добил и оттестировал предыдущий вариант, с джойном посуточного справочника, и в начале 4-го утра голова больше не соображает
...
Рейтинг: 0 / 0
вывод количества суток, в которых квартира была занята посетителями
    #38740125
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторя про скорость вопрос задавал не про относительно оптимизации этого примера, а просто на будущее знать опасен ли ceil(), потому что у нас во всех проектах используется именно он и если бы стало известно что ceil() дороговат в использовании относительно сложить и взять остаток, то я бы добавил этот пункт в правила написания кода в будущих проектах
я думаю, что поймать разницу можно если производить эти действия в циклк ~1000000, в любом другом случае - разница будет , не велика.
но, с другой стороны, если есть такая специфичная вещь, то "...этот ззз не спроста...."
...
Рейтинг: 0 / 0
вывод количества суток, в которых квартира была занята посетителями
    #38740529
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrew_jr20Lumix,

дяяядь, ну что за 10e5? :)) гугл молчит, и сам я такое первый раз вижу :)
а с полной реализацией завтра посмотрю, в чём там различия - только что добил и оттестировал предыдущий вариант, с джойном посуточного справочника, и в начале 4-го утра голова больше не соображает

не скажу!!;)))
но обещаю, что когда узнаешь долго будешь ржать)))) гарантирую!!

PS. не знаю какой у тебя гугл, но мой гугл содержит ответ в самой первой строке...
...
Рейтинг: 0 / 0
вывод количества суток, в которых квартира была занята посетителями
    #38741227
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumix,

что-то я тоже не понимаю, зачем добавлять 10к секунд и потом ещё некоторое небольшое количество, которое в 99% случаев на результат, возвращаемый этим date(), не повлияет вообще никак...
...
Рейтинг: 0 / 0
вывод количества суток, в которых квартира была занята посетителями
    #38741351
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirчто-то я тоже не понимаю, зачем добавлять 10к секунд и потом ещё некоторое небольшое количествоВообще, это классический способ конкатенации чисел. Но зачем он здесь - не знаю, не вникал.
...
Рейтинг: 0 / 0
вывод количества суток, в которых квартира была занята посетителями
    #38741593
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,

если бы там было 86400, я бы ещё понял, но 100000? хотя вообще-то 100000 тоже будет давать разные даты... но всё равно не понимаю, почему было не написать просто INTERVAL (s.i-1) DAY
...
Рейтинг: 0 / 0
16 сообщений из 41, страница 2 из 2
Форумы / MySQL [игнор отключен] [закрыт для гостей] / вывод количества суток, в которых квартира была занята посетителями
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]