powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Определить дату из
25 сообщений из 28, страница 1 из 2
Определить дату из
    #39819873
tem@
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть такая табличка:
id date1 date21 13.03. 2019 20:35:10 14.03. 2019 07:55:252 12.03. 2019 07:45:00 13.03. 2019 07:29:003 13.03. 2019 20:41:01 21.03. 2019 00:02:38

как выбрать например запись попадающий на дату 13.03. 2019 20:45:00
если выборка с between даст id =1 и 3, когда нужно получить только id=3
...
Рейтинг: 0 / 0
Определить дату из
    #39819876
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tem@нужно получить только id=3where id=3
...
Рейтинг: 0 / 0
Определить дату из
    #39819883
tem@
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
id как раз таки и не знаю, в запрос передается только дата
...
Рейтинг: 0 / 0
Определить дату из
    #39819887
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tem@если выборка с between даст id =1 и 3, когда нужно получить только id=3Почему?
http://www.bugtraq.ru/forum/faq/general/smart-questions.html] RTFM
...
Рейтинг: 0 / 0
Определить дату из
    #39819906
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tem@, когда нужно получить только id=3
почему 3, а не 1?

ps
max(id)

.....
stax
...
Рейтинг: 0 / 0
Определить дату из
    #39819919
tem@
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извините, не понятно задал вопрос, но нужно получить из таблицы дату которая максимально приближена к условию,
сделал такой запрос но не получается выбрать id=3 c таким условием

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT *
 FROM table
WHERE DATE1 = (
              SELECT MAX(DATE1)
                FROM table
               WHERE DATE2 = (
                              SELECT min(DATE2)
                                FROM table
                              WHERE DATE2 > TO_DATE('13.03. 2019 20:45:00', 'dd.mm.yyyy hh24:mi:ss')
                              )
                );



если дату передать '13.03.2019 20:37:00' то уже надо что бы id = 1
...
Рейтинг: 0 / 0
Определить дату из
    #39819938
Посетитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tem@Извините, не понятно задал вопрос, но нужно получить из таблицы дату которая максимально приближена к условию,
сделал такой запрос но не получается выбрать id=3 c таким условием

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT *
 FROM table
WHERE DATE1 = (
              SELECT MAX(DATE1)
                FROM table
               WHERE DATE2 = (
                              SELECT min(DATE2)
                                FROM table
                              WHERE DATE2 > TO_DATE('13.03. 2019 20:45:00', 'dd.mm.yyyy hh24:mi:ss')
                              )
                );




если дату передать '13.03.2019 20:37:00' то уже надо что бы id = 1

?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
with tabl(id,date1,date2) as
(select 1,to_date('13.03.2019 20:35:10','DD.MM.YYYY HH24:MI:SS'), to_date('14.03.2019 07:55:25','DD.MM.YYYY HH24:MI:SS') from dual
union all select 2, to_date('12.03.2019 07:45:00','DD.MM.YYYY HH24:MI:SS'), to_date('13.03.2019 07:29:00','DD.MM.YYYY HH24:MI:SS') from dual
union all select 3, to_date('13.03.2019 20:41:01','DD.MM.YYYY HH24:MI:SS'), to_date('21.03.2019 00:02:38','DD.MM.YYYY HH24:MI:SS') from dual
)
select * from (
select * 
  from tabl,(select to_date('13.03.2019 20:45:00','DD.MM.YYYY HH24:MI:SS') as d from dual) d
 where d between date1 and date2
 order by d-date1
) a 
where rownum = 1;
...
Рейтинг: 0 / 0
Определить дату из
    #39819962
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tem@Извините, не понятно задал вопрос, но нужно получить из таблицы дату которая максимально приближена к условиюКосноязычный, что есть "условие"? И "приближена" с какой стороны?
...
Рейтинг: 0 / 0
Определить дату из
    #39819974
Посетитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYПосетитель,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
with t as (
           select  table.*,
                   row_number() over(order by abs(date - to_date('13.03. 2019 20:45:00','dd.mm.yyyy hh24:mi:ss'))) rn
             from  table
          )
select  *
  from  t
  where rn = 1
/



полагаю, дата таки должна попадать внутрь диапазона.
а вот по расстоянию да какой из границ диапазона сортировать - вопрос неоднозначный
...
Рейтинг: 0 / 0
Определить дату из
    #39819976
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY
Код: plsql
1.
where rn = 1

Странное условие "между".
...
Рейтинг: 0 / 0
Определить дату из
    #39819981
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посетительполагаю, дата таки должна попадать внутрь диапазона.


Если дата внутри диапазона значит она <= DATE2, т.е. мы уже определились с "приближена с какой стороны".

SY.
...
Рейтинг: 0 / 0
Определить дату из
    #39819983
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ай, как нехорошо, Соломон, злоупотреблять модераторскими возможностями.
...
Рейтинг: 0 / 0
Определить дату из
    #39819987
Посетитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYПосетительполагаю, дата таки должна попадать внутрь диапазона.


Если дата внутри диапазона значит она <= DATE2, т.е. мы уже определились с "приближена с какой стороны".

SY.

видимо, я чего то не понимаю.
дата должна быть одновременно >=date1 и <=date2

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

и из фразы "максимально приближена к условию" неясно, какая граница из двух имеется в виду
...
Рейтинг: 0 / 0
Определить дату из
    #39819991
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicСтранное условие "между".

Как я понял ему "нужно получить из таблицы дату которая максимально приближена к условию" и он пробовал between но "если выборка с between даст id =1 и 3, когда нужно получить только id=3" .

SY.
...
Рейтинг: 0 / 0
Определить дату из
    #39819996
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посетительвидимо, я чего то не понимаю.
дата должна быть одновременно >=date1 и <=date2


Как я понял ему "нужно получить из таблицы дату которая максимально приближена к условию" и он пробовал between но "если выборка с between даст id =1 и 3, когда нужно получить только id=3". Так-что between, IMHO, была неудачная попытка "получить из таблицы дату которая максимально приближена к условию".

SY.
...
Рейтинг: 0 / 0
Определить дату из
    #39820000
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вобщем, tem@ должен четко сформулироать задачу.

SY.
...
Рейтинг: 0 / 0
Определить дату из
    #39820001
tem@
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY,

В том то и дело, between'ом получаю две строки, если в условие ставлю например '13.03. 2019 20:45:00', а нужно получить только одну, которая попадает в диапазон дат, но при этом чтобы id который = 1, не попадался в выборку

Получается нижняя граница диапазона даты
...
Рейтинг: 0 / 0
Определить дату из
    #39820007
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tem@Получается нижняя граница диапазона даты

OK, но должна ли дата быть внутри диапазона?

SY.
...
Рейтинг: 0 / 0
Определить дату из
    #39820011
tem@
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY
OK, но должна ли дата быть внутри диапазона?

SY.

Да.

Если дата например '13.03. 2019 20:40:00' то она должна быть в диапазоне:
1 13.03. 2019 20:35:10 14.03. 2019 07:55:25

Если дата '13.03. 2019 21:00:36' то она должна быть в диапазоне:
3 13.03. 2019 20:41:01 21.03. 2019 00:02:38
...
Рейтинг: 0 / 0
Определить дату из
    #39820025
tem@
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На данный момент исправил свой запрос, на такой, выборку производит как надо, правильно ли сделал запрос и есть ли другой способ?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
SELECT *
  FROM table
 WHERE DATE1 = (
          SELECT max(DATE1)
            FROM table
           WHERE DATE1 <= TO_DATE('13.03. 2019 21:30:20', 'dd.mm.yyyy hh24:mi:ss')
             )
...
Рейтинг: 0 / 0
Определить дату из
    #39820026
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посетительполагаю, дата таки должна попадать внутрь диапазона.


ABS лишний

order by least(d-date1,date2-d)
....
stax
...
Рейтинг: 0 / 0
Определить дату из
    #39820028
Посетитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StaxПосетительполагаю, дата таки должна попадать внутрь диапазона.


ABS лишний

order by least(d-date1,date2-d)
....
stax

у меня и не было abs. а верхнюю границу ТС не просил
...
Рейтинг: 0 / 0
Определить дату из
    #39820031
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tem@На данный момент исправил свой запрос, на такой, выборку производит как надо, правильно ли сделал запрос и есть ли другой способ?


Могут ли диапазоны пересекаться (включая дубли)? Вернее могут ли быть нeсколько диапазонов с одинаковой DATE1?

SY.
...
Рейтинг: 0 / 0
Определить дату из
    #39820032
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПосетительStaxпропущено...


ABS лишний

order by least(d-date1,date2-d)
....
stax

у меня и не было abs. а верхнюю границу ТС не просил

я понял так
попадает в диапазон и максимально приближена к границе (нижней ИЛИ верхней)

но tem@ виднее

....
stax
...
Рейтинг: 0 / 0
Определить дату из
    #39820034
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tem@На данный момент исправил свой запрос, на такой, выборку производит как надо, правильно ли сделал запрос и есть ли другой способ?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
SELECT *
  FROM table
 WHERE DATE1 = (
          SELECT max(DATE1)
            FROM table
           WHERE DATE1 <= TO_DATE('13.03. 2019 21:30:20', 'dd.mm.yyyy hh24:mi:ss')
             )


імхо, нет

чем не устраівает 21896972 ?
....
stax
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Определить дату из
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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