powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Задача - составить запрос, который выберет одно значение, наиболее близкое к заданному
8 сообщений из 8, страница 1 из 1
Задача - составить запрос, который выберет одно значение, наиболее близкое к заданному
    #39655093
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В базе есть записи даты и времени события.
01.06.2018 00:00
01.06.2018 06:00
01.06.2018 12:00
01.06.2018 16:00
01.06.2018 20:00
Нужно выбрать строку, соответствующую 07:00, а т.к. такой строки нет в базе, то надо выбрать ближайшую к ней по времени, без разницы, в какую сторону. Т.е. в данном случае это будет строка 01.06.2018 06:00.
Как составить запрос?
...
Рейтинг: 0 / 0
Задача - составить запрос, который выберет одно значение, наиболее близкое к заданному
    #39655103
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вроде получилось:
Код: sql
1.
2.
3.
4.
5.
SELECT id, metcast_date, 
FROM metcast
WHERE DATE(metcast_date) = '2018-06-01'
ORDER BY ABS(TIMESTAMPDIFF(SECOND, metcast_date, '2018-06-01 07:00:00'))
LIMIT 1
...
Рейтинг: 0 / 0
Задача - составить запрос, который выберет одно значение, наиболее близкое к заданному
    #39655158
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvlad
Код: sql
1.
WHERE DATE(metcast_date) = '2018-06-01'

А если ближайшая запись окажется в предыдущих сутках? Или в следующих?
...
Рейтинг: 0 / 0
Задача - составить запрос, который выберет одно значение, наиболее близкое к заданному
    #39655163
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvlad
Код: sql
1.
WHERE DATE(metcast_date) = '2018-06-01'


Правильнее нечто типа
Код: sql
1.
2.
WHERE metcast_date BETWEEN '2018-06-01 07:00:00' - INTERVAL 1 DAY 
                     AND '2018-06-01 07:00:00' + INTERVAL 1 DAY 
...
Рейтинг: 0 / 0
Задача - составить запрос, который выберет одно значение, наиболее близкое к заданному
    #39655164
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

Тут аналогичный вопрос к ТС - а что если и суточного зазора не хватит?
...
Рейтинг: 0 / 0
Задача - составить запрос, который выберет одно значение, наиболее близкое к заданному
    #39655232
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft , ну данное ограничение, понятно, вводится исключительно для того, чтобы всю таблицу не лопатить. Поскольку "зазоры" 4-часовые, может, суток и правда маловато, можно и месяц взять... а если в месяц, ну плюс-минус, нет ни одной записи - так, наверное, и пофиг уже, где там ближайшая...
...
Рейтинг: 0 / 0
Задача - составить запрос, который выберет одно значение, наиболее близкое к заданному
    #39655236
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akinaну данное ограничение, понятно, вводится исключительно для того, чтобы всю таблицу не лопатить.Обычно это решается чуть более сложным запросом:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
SELECT t.id, t.metcast_date FROM
(
  (
    SELECT id, metcast_date
    FROM metcast
    WHERE metcast_date < '2018-06-01 07:00:00'
    ORDER BY metcast_date DESC
    LIMIT 1
  )
  UNION ALL
  (
    SELECT id, metcast_date
    FROM metcast
    WHERE metcast_date >= '2018-06-01 07:00:00'
    ORDER BY metcast_date
    LIMIT 1
  )
) t
ORDER BY ABS(TIMESTAMPDIFF(SECOND, t.metcast_date, '2018-06-01 07:00:00'))
LIMIT 1

При наличии индекса по полю metcast_date ни зазоры, ни количество записей в таблице практически не играют роли.

Но ТС смутил меня этим дополнительным условием, и у меня есть подозрение, что он не до конца сформулировал задачу.
...
Рейтинг: 0 / 0
Задача - составить запрос, который выберет одно значение, наиболее близкое к заданному
    #39655451
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,

да, последний вариант наиболее подходящий.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Задача - составить запрос, который выберет одно значение, наиболее близкое к заданному
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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