Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Informix [игнор отключен] [закрыт для гостей] / ... where value in (select value from...) - возможно? / 21 сообщений из 21, страница 1 из 1
26.01.2006, 06:04
    #33503810
Andrey Metelyov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
... where value in (select value from...) - возможно?
Возможно ли в Informix написать подобный запрос:
Код: plaintext
1.
2.
3.
4.
5.
select ...
from ...
where value in (
    select value 
    from ...
)

Informix Dynamic Server 2000 Version 9.21.UC6X8
...
Рейтинг: 0 / 0
26.01.2006, 07:49
    #33503851
Владимор Конев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
... where value in (select value from...) - возможно?
Andrey MetelyovВозможно ли в Informix написать подобный запрос:
Код: plaintext
select ...\nfrom ...\nwhere value in (\n    select value \n    from ...\n)

Informix Dynamic Server 2000 Version 9.21.UC6X8
А почему бы и нет???
Тынц №1 - вот тут человек показывает, что у него подзапрос работает
...
Рейтинг: 0 / 0
26.01.2006, 08:44
    #33503918
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
... where value in (select value from...) - возможно?
Andrey Metelyov Informix Dynamic Server 2000 Version 9.21.UC6X8 Где вы берете такие версии? X8 - это наверно ночной билд, в нем все что угодно может не работать, вплоть до select вообще.
...
Рейтинг: 0 / 0
26.01.2006, 10:14
    #33504135
Andrey Metelyov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
... where value in (select value from...) - возможно?
Мда...
у меня видимо проблема в другом...
Вот запрос, работающий на Oracle:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
select datetime, sum(h2124)* 100 /sum(h2089) TCH_BLOCKING_RATE_BH_MAX
from cellstats
where trunc(datetime) in (
	select day
	from ( 
		select trunc(datetime) day, sum(h2277) traffic
		from cellstats
		where datetime >= trunc(sysdate)- 7  and datetime < trunc(sysdate)
		group by trunc(datetime)
		order by traffic desc)
	where rownum<= 5 
)	
group by
	datetime
order by
	TCH_BLOCKING_RATE_BH_MAX desc
Смысл его в следующем:
выбираю 5 дней из 7 с максимальным трафиком и считаю нужный мне показатель только по этим 5 дням.
Мне необходимо сделать аналогичный на Informix, начал так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select date_and_time, sum(alloc_tch_fail)* 100 /sum(alloc_tch+alloc_tch_fail) TCH_BLOCKING_RATE_BH_MAX
from v_cell_statistics
where date(date_and_time) in (
	select first  5  date(date_and_time) day, sum(busy_tch_mean) traffic
	from v_cell_statistics
	where date_and_time >= date(current)- 7  and date_and_time < date(current)
	group by  1 
	order by traffic desc
)	
group by
	date_and_time
order by
	TCH_BLOCKING_RATE_BH_MAX desc
выдает -201 A syntax error has occurred.
Думаю проблема в этом (select возвращает 2 колонки [day, traffic] , а нужна одна [day] . Как избавиться от [traffic] ?:
Код: plaintext
1.
2.
3.
...
where date(date_and_time) in (
	select first  5  date(date_and_time) day, sum(busy_tch_mean) traffic
...
Или есть более другие варианты организации подобного? Буду рад узнать.
...
Рейтинг: 0 / 0
26.01.2006, 10:20
    #33504152
Andrey Metelyov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
... where value in (select value from...) - возможно?
Журавлев ДенисГде вы берете такие версии? X8 - это наверно ночной билд, в нем все что угодно может не работать, вплоть до select вообще.
Я его не ставил :)
На этом работает Motorola'вская система управления сетью сотовой связи...
...
Рейтинг: 0 / 0
26.01.2006, 10:51
    #33504262
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
... where value in (select value from...) - возможно?
Andrey Metelyov... in (
select first 5 Нельзя в этом случае first, и order by нельзя и две колонки нельзя.
...
Рейтинг: 0 / 0
26.01.2006, 10:56
    #33504282
Тан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
... where value in (select value from...) - возможно?
Andrey MetelyovМда...
у меня видимо проблема в другом...
Вот запрос, работающий на Oracle:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
select datetime, sum(h2124)* 100 /sum(h2089) TCH_BLOCKING_RATE_BH_MAX
from cellstats
where trunc(datetime) in (
	select day
	from ( 
		select trunc(datetime) day, sum(h2277) traffic
		from cellstats
		where datetime >= trunc(sysdate)- 7  and datetime < trunc(sysdate)
		group by trunc(datetime)
		order by traffic desc)
	where rownum<= 5 
)	
group by
	datetime
order by
	TCH_BLOCKING_RATE_BH_MAX desc
В исходном запросе подзапросов было два, вы пытаетесь сделать один. Не получится.
...
Рейтинг: 0 / 0
26.01.2006, 10:58
    #33504290
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
... where value in (select value from...) - возможно?
Код: plaintext
1.
2.
3.
trunc(datetime) in (
	select day
	from ( 
		select trunc(datetime)

Код: plaintext
1.
where date(date_and_time) in (
	select first  5  date(date_and_time)
Так писать полное самоубийство при отсутствии функционального индекса date(date_and_time), дба сначала стукнет кувалдой по пальцам, а потом повесит.
...
Рейтинг: 0 / 0
26.01.2006, 20:54
    #33506111
Выбегалло
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
... where value in (select value from...) - возможно?
Вот этого в информиксе тоже нельзя : select ... from (select ...).
Создайте view или выберите во временную таблицу.

В таком вот аксепте
...
Рейтинг: 0 / 0
27.01.2006, 03:49
    #33506364
Andrey Metelyov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
... where value in (select value from...) - возможно?
То бишь одним select'ом не получится?
...
Рейтинг: 0 / 0
27.01.2006, 12:07
    #33507040
onstat-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
... where value in (select value from...) - возможно?
Andrey MetelyovТо бишь одним select'ом не получится?

В принципе получится только некоторые детали нужно прояснить.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
select datetime, sum(h2124)* 100 /sum(h2089) TCH_BLOCKING_RATE_BH_MAX
from cellstats
where trunc(datetime) in (
	select day
	from ( 
		select trunc(datetime) day, sum(h2277) traffic
		from cellstats
		where datetime >= trunc(sysdate)- 7  and datetime < trunc(sysdate)
		group by trunc(datetime)
		order by traffic desc)
	where rownum<= 5 
)	
group by
	datetime
order by
	TCH_BLOCKING_RATE_BH_MAX desc


Зачем считатестя агрегат во вложеном запросе?

Почему в условии where выбиратеся 7 дней а выборка ограничевается 5 строками?

Что мешает воспользоваться distinct?
...
Рейтинг: 0 / 0
27.01.2006, 13:02
    #33507272
Valentyn Pidburtnyi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
... where value in (select value from...) - возможно?
Andrey MetelyovМда...
у меня видимо проблема в другом...
Вот запрос, работающий на Oracle:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
select datetime, sum(h2124)* 100 /sum(h2089) TCH_BLOCKING_RATE_BH_MAX
from cellstats
where trunc(datetime) in (
	select day
	from ( 
		select trunc(datetime) day, sum(h2277) traffic
		from cellstats
		where datetime >= trunc(sysdate)- 7  and datetime < trunc(sysdate)
		group by trunc(datetime)
		order by traffic desc)
	where rownum<= 5 
)	
group by
	datetime
order by
	TCH_BLOCKING_RATE_BH_MAX desc

Для подзапросов можно использовать конструкцию TABLE(MULTISET()).

Подзапрос из Оракла:
Код: plaintext
1.
2.
3.
4.
select trunc(datetime) day, sum(h2277) traffic
from cellstats
where datetime >= trunc(sysdate)- 7  and datetime < trunc(sysdate)
group by trunc(datetime)
order by traffic desc
на первый взгляд можно заменить на:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select s2.day, count(*) as rownum
from table(multiset(
	select date(date_and_time) as day, sum(busy_tch_mean) as traffic
	from v_cell_statistics
	where date_and_time >= date(current) -  7  and date_and_time < date(current)
	)) s1
  join table(multiset(
	select date(date_and_time) as day, sum(busy_tch_mean) as traffic
	from v_cell_statistics
	where date_and_time >= date(current) -  7  and date_and_time < date(current)
	)) s2 on	date(s2.date_and_time) = date(s1.date_and_time)
			and (s2.traffic > s1.traffic or s2.traffic = s1.traffic and s2.day >= s1.day)
group by  1 


Остальная часть запроса будет без изменений:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
select date_and_time, sum(alloc_tch_fail)* 100 /sum(alloc_tch+alloc_tch_fail) as TCH_BLOCKING_RATE_BH_MAX
from v_cell_statistics
where date(date_and_time) in (
	select day
	from table(multiset( 
		select s2.day, count(*) as rownum
		from table(multiset(
			select date(date_and_time) as day, sum(busy_tch_mean) as traffic
			from v_cell_statistics
			where date_and_time >= date(current) -  7  and date_and_time < date(current)
			)) s1
		  join table(multiset(
			select date(date_and_time) as day, sum(busy_tch_mean) as traffic
			from v_cell_statistics
			where date_and_time >= date(current) -  7  and date_and_time < date(current)
			)) s2 on	date(s2.date_and_time) = date(s1.date_and_time)
					and (s2.traffic > s1.traffic or s2.traffic = s1.traffic and s2.day >= s1.day)
		group by  1 
		)) s
	where rownum <=  5 )	
group by date_and_time
order by TCH_BLOCKING_RATE_BH_MAX desc

Проще через временные таблички, но в любом случае настолько красиво как в Оракле - не выйдет...

ЗЫ
Возможны ошибки, но в общем - так...
...
Рейтинг: 0 / 0
27.01.2006, 14:01
    #33507497
Тан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
... where value in (select value from...) - возможно?
Valentyn PidburtnyiДля подзапросов можно использовать конструкцию TABLE(MULTISET()).
Informix Dynamic Server 2000 Version 9.21.UC6X8 не умеет MULTISET()
...
Рейтинг: 0 / 0
27.01.2006, 14:21
    #33507563
Тан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
... where value in (select value from...) - возможно?
Тан Valentyn PidburtnyiДля подзапросов можно использовать конструкцию TABLE(MULTISET()).
Informix Dynamic Server 2000 Version 9.21.UC6X8 не умеет MULTISET()Ошиблась.
This manual describes the following extensibility enhancements to Version 9.2 of Dynamic Server:
...
Enhancements to collections:
- Collection constructors that use arbitrary expression elements
- Collection-derived tables
- Collection subqueries
...
...
Рейтинг: 0 / 0
30.01.2006, 05:23
    #33509762
Andrey Metelyov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
... where value in (select value from...) - возможно?
Valentyn PidburtnyiОстальная часть запроса будет без изменений:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
select date_and_time, sum(alloc_tch_fail)* 100 /sum(alloc_tch+alloc_tch_fail) as TCH_BLOCKING_RATE_BH_MAX
from v_cell_statistics
where date(date_and_time) in (
	select day
	from table(multiset( 
		select s2.day, count(*) as rownum
		from table(multiset(
			select date(date_and_time) as day, sum(busy_tch_mean) as traffic
			from v_cell_statistics
			where date_and_time >= date(current) -  7  and date_and_time < date(current)
			)) s1
		  join table(multiset(
			select date(date_and_time) as day, sum(busy_tch_mean) as traffic
			from v_cell_statistics
			where date_and_time >= date(current) -  7  and date_and_time < date(current)
			)) s2 on	date(s2.date_and_time) = date(s1.date_and_time)
					and (s2.traffic > s1.traffic or s2.traffic = s1.traffic and s2.day >= s1.day)
		group by  1 
		)) s
	where rownum <=  5 )	
group by date_and_time
order by TCH_BLOCKING_RATE_BH_MAX desc

Проще через временные таблички, но в любом случае настолько красиво как в Оракле - не выйдет...

ЗЫ
Возможны ошибки, но в общем - так...

Заработал (с небольшими исправлениями):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
select date_and_time, sum(alloc_tch_fail)* 100 /sum(alloc_tch+alloc_tch_fail) as TCH_BLOCKING_RATE_BH_MAX
from v_cell_statistics
where date(date_and_time) in (
	select day
	from table(multiset( 
		select s2.day, count(*) as rownum
		from table(multiset(
			select date(date_and_time) as day, sum(busy_tch_mean) as traffic
			from v_cell_statistics
			where date_and_time >= date(current) -  7  and date_and_time < date(current)
			group by  1 
			)) s1
		  join table(multiset(
			select date(date_and_time) as day, sum(busy_tch_mean) as traffic
			from v_cell_statistics
			where date_and_time >= date(current) -  7  and date_and_time < date(current)
			group by  1 
			)) s2 on	s2.day = s1.day
					and (s2.traffic > s1.traffic or s2.traffic = s1.traffic and s2.day >= s1.day)
		group by  1 
		)) s
	where rownum <=  5 )	
group by date_and_time
order by TCH_BLOCKING_RATE_BH_MAX desc
...
Рейтинг: 0 / 0
30.01.2006, 05:28
    #33509763
Andrey Metelyov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
... where value in (select value from...) - возможно?
onstat-

В принципе получится только некоторые детали нужно прояснить.

Зачем считатестя агрегат во вложеном запросе?

Почему в условии where выбиратеся 7 дней а выборка ограничевается 5 строками?

Что мешает воспользоваться distinct?

Вложенный запрос должен выдать 5 дней из 7 с максимальным трафиком.
...
Рейтинг: 0 / 0
30.01.2006, 11:37
    #33510319
Сугубый
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
... where value in (select value from...) - возможно?
(немного в сторону)

1. я частенько делаю что-то типа
Код: plaintext
1.
select * from tab_1 where id||trdate in
(select id||trdate from tab_2)
т.е. просто конкатенирую необходимые поля в подзапросе, если нужно связать по нескольким полям.

Согласен - коряво, но на скорую руку - работает. Хоть и медленно.

2. В MySQL подзапросов нет вообще, там все делается outer join-ами. И по теории любой подзапрос можно разложить в плайн SQL.
...
Рейтинг: 0 / 0
30.01.2006, 12:39
    #33510550
Владимор Конев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
... where value in (select value from...) - возможно?
Сугубый2. В MySQL подзапросов нет вообще , там все делается outer join-ами.Да ну?!?!?!? Прямо-таки нет ни в одной версии???
Или-таки нет, но только в версиях < 4.1, а начиная с версии 4.1 есть ?
;-)
...
Рейтинг: 0 / 0
30.01.2006, 13:30
    #33510767
Сугубый
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
... where value in (select value from...) - возможно?
Владимор Конев Сугубый2. В MySQL подзапросов нет вообще , там все делается outer join-ами.Да ну?!?!?!? Прямо-таки нет ни в одной версии???
Или-таки нет, но только в версиях < 4.1, а начиная с версии 4.1 есть ?
;-)
http://www.mysql.ru/docs/man/SELECT.html
и где?
(наверно это уже оффтоп - можете в личку - itogo(сабака)mail.ru)
...
Рейтинг: 0 / 0
31.01.2006, 05:21
    #33512205
Владимор Конев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
... where value in (select value from...) - возможно?
Сугубыйи где?Вот тут
...
Рейтинг: 0 / 0
31.01.2006, 05:26
    #33512207
Владимор Конев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
... where value in (select value from...) - возможно?
Сугубый http://www.mysql.ru/docs/man/SELECT.html Кроме того, там документация лежит от Царя Гороха... :)
Тынц
...
Рейтинг: 0 / 0
Форумы / Informix [игнор отключен] [закрыт для гостей] / ... where value in (select value from...) - возможно? / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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