Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 + плюс один день  [new]
u4enik
Member

Откуда:
Сообщений: 12
Подскажите, как побороть такую бяку.
в селекте нужно выбрать истории по такому критерию:
where t.start_date + 1 between a.start_date and a.end_date

селект с "+1" работает гораздо дольше, чем просто
where t.start_date between a.start_date and a.end_date

но мне нужно именно первый случай, т.е. когда t.start_date+1 отсекает предыдущую историю с a.end_date = t.strat_date

проблема в том, что запрос с +1 выполняется не просто долго, а очень долго.. может 3-4 часа крутиться, в то время, как без +1 несколько минут.
27 сен 06, 18:12    [3192710]     Ответить | Цитировать Сообщить модератору
 Re: + плюс один день  [new]
contr
Member

Откуда:
Сообщений: 1909
u4enik
но мне нужно именно первый случай, т.е. когда t.start_date+1 отсекает предыдущую историю с a.end_date = t.strat_date

Не понял вопроса.
Вы хотите узнать, как написать
where t.start_date between a.start_date-1 and a.end_date-1
или что-то более другое?
27 сен 06, 18:16    [3192739]     Ответить | Цитировать Сообщить модератору
 Re: + плюс один день  [new]
kapelan
Member

Откуда: хутор БольшойБугор
Сообщений: 722
where t.start_date + 1 between a.start_date and a.end_date
=
where t.start_date  between a.start_date +1 and a.end_date +1
27 сен 06, 18:18    [3192748]     Ответить | Цитировать Сообщить модератору
 Re: + плюс один день  [new]
juks@gala.net
Member

Откуда: Киев
Сообщений: 4212
Видать индекс построен по start_date.
27 сен 06, 18:19    [3192757]     Ответить | Цитировать Сообщить модератору
 Re: + плюс один день  [new]
contr
Member

Откуда:
Сообщений: 1909
kapelan
where t.start_date + 1 between a.start_date and a.end_date
=
where t.start_date  between a.start_date +1 and a.end_date +1

Ой ли?
27 сен 06, 18:20    [3192759]     Ответить | Цитировать Сообщить модератору
 Re: + плюс один день  [new]
u4enik
Member

Откуда:
Сообщений: 12
contr
u4enik
но мне нужно именно первый случай, т.е. когда t.start_date+1 отсекает предыдущую историю с a.end_date = t.strat_date

Не понял вопроса.
Вы хотите узнать, как написать
where t.start_date between a.start_date-1 and a.end_date-1
или что-то более другое?


)) шутка?? оценил..
есть истории такие
strat_date = 01.07.2006 и end_date = 01.08.2006
strat_date = 01.08.2006 и end_date = 01.09.2006

так вот мне нужно выбрать вторую. если я в запросе укажу
t.start_date between a.start_date and a.end_date

то выберутся обе. первая по енд дате а вторая по старт_дате. Что бы выкинуть вторую историю я к t.start_date априбавляю один день тем самым остекая предыдущую историю.
Запрос выполняется при этом очень долго. Что делать??????????????
27 сен 06, 18:23    [3192782]     Ответить | Цитировать Сообщить модератору
 Re: + плюс один день  [new]
M_IV
Member

Откуда:
Сообщений: 1303
1.
select count(*) from a;
select count(*) from t;
2.
select * from user_ind_columns where table_name in ('a','t') and lower(column_name) in ('start_date', 'end_date')
3. plan
27 сен 06, 18:24    [3192790]     Ответить | Цитировать Сообщить модератору
 Re: + плюс один день  [new]
u4enik
Member

Откуда:
Сообщений: 12
сори забыл добывитть что t.start_date = 01.08.2006
27 сен 06, 18:24    [3192793]     Ответить | Цитировать Сообщить модератору
 Re: + плюс один день  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
u4enik
..проблема в том, что запрос с +1 выполняется не просто долго, а очень долго.. может 3-4 часа крутиться, в то время, как без +1 несколько минут.

когда исправите - ищите еще .. имхо, так жить нельзя
27 сен 06, 18:25    [3192804]     Ответить | Цитировать Сообщить модератору
 Re: + плюс один день  [new]
u4enik
Member

Откуда:
Сообщений: 12
M_IV
1.
select count(*) from a;
select count(*) from t;
2.
select * from user_ind_columns where table_name in ('a','t') and lower(column_name) in ('start_date', 'end_date')
3. plan


а можно перевести.что это и зачем??
27 сен 06, 18:26    [3192808]     Ответить | Цитировать Сообщить модератору
 Re: + плюс один день  [new]
alex-ls
Member

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 6912
1. слева в условии д.б. только поле, все выражения переносите в правую часть условия
2. FBI просто чисто теоретически для данного случая
27 сен 06, 18:28    [3192819]     Ответить | Цитировать Сообщить модератору
 Re: + плюс один день  [new]
kapelan
Member

Откуда: хутор БольшойБугор
Сообщений: 722
contr
kapelan
where t.start_date + 1 between a.start_date and a.end_date
=
where t.start_date  between a.start_date +1 and a.end_date +1

Ой ли?

?
27 сен 06, 18:29    [3192832]     Ответить | Цитировать Сообщить модератору
 Re: + плюс один день  [new]
Elic
Member

Откуда:
Сообщений: 29979
u4enik
contr
where t.start_date between a.start_date-1 and a.end_date-1
)) шутка?? оценил..
Как "Устройство, служащее для придания большого отрицательного ускорения транспортному стредству", ты ничего не понял.
27 сен 06, 18:30    [3192841]     Ответить | Цитировать Сообщить модератору
 Re: + плюс один день  [new]
pamir
Member [скрыт]

Откуда:
Сообщений: 27433
kapelan
contr
kapelan
where t.start_date + 1 between a.start_date and a.end_date
=
where t.start_date  between a.start_date +1 and a.end_date +1

Ой ли?

?

Знаки ты попутал
27 сен 06, 18:31    [3192842]     Ответить | Цитировать Сообщить модератору
 Re: + плюс один день  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
кажется, смысл задачи от меня далеко..
но на всякий случай, спрошу
where t.start_date > a.start_date and t.start_date <= a.end_date
?
27 сен 06, 18:31    [3192846]     Ответить | Цитировать Сообщить модератору
 Re: + плюс один день  [new]
u4enik
Member

Откуда:
Сообщений: 12
kapelan
contr
kapelan
where t.start_date + 1 between a.start_date and a.end_date
=
where t.start_date  between a.start_date +1 and a.end_date +1

Ой ли?

?


нет. если посмотреть даты то будет понятно что ничего не выберется.
если токо так
where t.start_date between a.start_date and a.end_date-1
27 сен 06, 18:32    [3192853]     Ответить | Цитировать Сообщить модератору
 Re: + плюс один день  [new]
u4enik
Member

Откуда:
Сообщений: 12
orawish
кажется, смысл задачи от меня далеко..
но на всякий случай, спрошу
where t.start_date > a.start_date and t.start_date <= a.end_date
?

ага.. похоже,но время уходит примерно стоко же как с +1.
27 сен 06, 18:36    [3192880]     Ответить | Цитировать Сообщить модератору
 Re: + плюс один день  [new]
M_IV
Member

Откуда:
Сообщений: 1303
Offtop:
-------------------------------
u4enik
а можно перевести.что это и зачем??
можно, но лень, букв много, а мне тяжело набирать кирилицей
27 сен 06, 18:37    [3192883]     Ответить | Цитировать Сообщить модератору
 Re: + плюс один день  [new]
u4enik
Member

Откуда:
Сообщений: 12
M_IV
Offtop:
-------------------------------
u4enik
а можно перевести.что это и зачем??
можно, но лень, букв много, а мне тяжело набирать кирилицей

окей
27 сен 06, 18:39    [3192901]     Ответить | Цитировать Сообщить модератору
 Re: + плюс один день  [new]
M_IV
Member

Откуда:
Сообщений: 1303
alex-ls
2. FBI просто чисто теоретически для данного случая
+1
27 сен 06, 18:39    [3192902]     Ответить | Цитировать Сообщить модератору
 Re: + плюс один день  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18343
u4enik
сори забыл добывитть что t.start_date = 01.08.2006

Вы это ищете?
SQL> with tab as(
  2  select to_date('01.07.2006','dd-mm-rr') strat_date, to_date('01.08.2006','dd-mm-rr') end_date from dual union all
  3  select to_date('01.08.2006','dd-mm-rr') , to_date('01.09.2006','dd-mm-rr') from dual
  4  )
  5  select *
  6  from tab
  7  where to_date('01.08.2006','dd-mm-rr') between strat_date and end_date-1/86400;

STRAT_DATE  END_DATE
----------- -----------
01-авг-06   01-сен-06

SQL> 
27 сен 06, 18:40    [3192909]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить