powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Informix [игнор отключен] [закрыт для гостей] / ... where value in (select value from...) - возможно?
21 сообщений из 21, страница 1 из 1
... where value in (select value from...) - возможно?
    #33503810
Andrey Metelyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возможно ли в 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
... where value in (select value from...) - возможно?
    #33503851
Владимор Конев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
... where value in (select value from...) - возможно?
    #33503918
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey Metelyov Informix Dynamic Server 2000 Version 9.21.UC6X8 Где вы берете такие версии? X8 - это наверно ночной билд, в нем все что угодно может не работать, вплоть до select вообще.
...
Рейтинг: 0 / 0
... where value in (select value from...) - возможно?
    #33504135
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
Смысл его в следующем:
выбираю 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
... where value in (select value from...) - возможно?
    #33504152
Andrey Metelyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Журавлев ДенисГде вы берете такие версии? X8 - это наверно ночной билд, в нем все что угодно может не работать, вплоть до select вообще.
Я его не ставил :)
На этом работает Motorola'вская система управления сетью сотовой связи...
...
Рейтинг: 0 / 0
... where value in (select value from...) - возможно?
    #33504262
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey Metelyov... in (
select first 5 Нельзя в этом случае first, и order by нельзя и две колонки нельзя.
...
Рейтинг: 0 / 0
... where value in (select value from...) - возможно?
    #33504282
Фотография Тан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
... where value in (select value from...) - возможно?
    #33504290
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
... where value in (select value from...) - возможно?
    #33506111
Выбегалло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот этого в информиксе тоже нельзя : select ... from (select ...).
Создайте view или выберите во временную таблицу.

В таком вот аксепте
...
Рейтинг: 0 / 0
... where value in (select value from...) - возможно?
    #33506364
Andrey Metelyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То бишь одним select'ом не получится?
...
Рейтинг: 0 / 0
... where value in (select value from...) - возможно?
    #33507040
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
... where value in (select value from...) - возможно?
    #33507272
Valentyn Pidburtnyi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
... where value in (select value from...) - возможно?
    #33507497
Фотография Тан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valentyn PidburtnyiДля подзапросов можно использовать конструкцию TABLE(MULTISET()).
Informix Dynamic Server 2000 Version 9.21.UC6X8 не умеет MULTISET()
...
Рейтинг: 0 / 0
... where value in (select value from...) - возможно?
    #33507563
Фотография Тан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тан 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
... where value in (select value from...) - возможно?
    #33509762
Andrey Metelyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
... where value in (select value from...) - возможно?
    #33509763
Andrey Metelyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
onstat-

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

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

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

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

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

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

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

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


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