powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите с логикой запроса.
14 сообщений из 39, страница 2 из 2
Помогите с логикой запроса.
    #38487480
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hedgehogelezхрень точно косячная... Аналогично результат не ICE...
Любая IDE, не поставляемая в составе инструментальных средств сервера, по определению хрень косячная. Ибо неизвестно, как именно она взаимодействует с сервером, а также что ещё она делает с запросом по пути туда, и с ответом по пути обратно.

В твоём случае, я думаю, просто схема общения с сервером не поддерживает мультизапросы. Попробуй инициализацию переменной перенести из выражения в секцию FROM.
...
Рейтинг: 0 / 0
Помогите с логикой запроса.
    #38487634
hedgehogelez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пишу скрипт перловский с хешем от безнадеги.... То ж на тож получается... :-(
...
Рейтинг: 0 / 0
Помогите с логикой запроса.
    #38487766
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hedgehogelez , а что, вот это не помогает?AkinaПопробуй инициализацию переменной перенести из выражения в секцию FROM.
...
Рейтинг: 0 / 0
Помогите с логикой запроса.
    #38488430
hedgehogelez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cygapb-007,

Запрос работает и без переноса переменной, но он работает, работает и работает и в прошествии 1ч 44мин выполнение было мной прервано...
...
Рейтинг: 0 / 0
Помогите с логикой запроса.
    #38488462
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hedgehogelezЗапрос работает и без переноса переменной, но он работает, работает и работает и в прошествии 1ч 44мин выполнение было мной прервано...
Какой именно? вот этот: 15231044 ? даже несмотря на его полную бредовость и несоблюдение синтаксиса?
...
Рейтинг: 0 / 0
Помогите с логикой запроса.
    #38488574
hedgehogelez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

АГА! :-)
...
Рейтинг: 0 / 0
Помогите с логикой запроса.
    #38488661
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hedgehogelezCygapb-007,

Запрос работает и без переноса переменной, но он работает, работает и работает и в прошествии 1ч 44мин выполнение было мной прервано...Это не то же самое, что падает с синтаксической ошибкой, это раз.

Второе - есть большая разница (по времени обработки) между проверкой 8 месяцев подряд и 45 месяцев подряд

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

АГА! :-)
Вот не поленюсь сюда скопировать этот "шедевр".

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
set @q=45;
select distinct c.*
from mem_net m
join mem_net c on c.rank>6 and c.calc_month between m.calc_month and m.calc_month+@q-1
where m.rank>6 and @q<=(
  select count(*) 
  from mem_net c
  where c.rank>6 and c.calc_month between m.calc_month and m.calc_month+@q-1
  )



У тебя в нескольких местах явно берутся поля из таблицы с алиасом 'с'. Попробуй доказательно обосновать, какая из двух указанных мной копий использована в каждом конкретном случае.
...
Рейтинг: 0 / 0
Помогите с логикой запроса.
    #38489247
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinahedgehogelezAkina,

АГА! :-)
Вот не поленюсь сюда скопировать этот "шедевр".

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
set @q=45;
select distinct c.*
from mem_net m
join mem_net c on c.rank>6 and c.calc_month between m.calc_month and m.calc_month+@q-1
where m.rank>6 and @q<=(
  select count(*) 
  from mem_net c
  where c.rank>6 and c.calc_month between m.calc_month and m.calc_month+@q-1
  )



У тебя в нескольких местах явно берутся поля из таблицы с алиасом 'с'. Попробуй доказательно обосновать, какая из двух указанных мной копий использована в каждом конкретном случае.Это что за наезды))?

Не верите, что такой скрипт рабочий? Сходите по ранее приведенной ссылке http://sqlfiddle.com/#!2/9cabac/1
...
Рейтинг: 0 / 0
Помогите с логикой запроса.
    #38489250
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Долгий - да, но про оптимизацию (на тот момент) никто не говорил...
...
Рейтинг: 0 / 0
Помогите с логикой запроса.
    #38489261
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
решает следующую задачу:

Отобрать последовательные записи таблицы, отсортированные по CALC_MONTH, в которых все ранги > 6, с длиной последовательности не менее @q строк подряд
...
Рейтинг: 0 / 0
Помогите с логикой запроса.
    #38489395
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hedgehogelezПриветствую форумчане. Есть такая таблица:

calc_month номер месяца по порядку rank он и есть ранг :-)
Так вот никак до меня не дойдет, как выбрать все поля где rank > 6 встречается восемь месяцев подряд, типа
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
...  EXISTS (SELECT 1 FROM `mem_net` WHERE `mem_net`.`calc_month` = 53 AND `mem_net`.`rank` > 6 ) AND
  EXISTS (SELECT 1 FROM `mem_net` WHERE `mem_net`.`calc_month` = 52 AND `mem_net`.`rank` > 6 ) AND
  EXISTS (SELECT 1 FROM `mem_net` WHERE `mem_net`.`calc_month` = 51 AND `mem_net`.`rank` > 6 ) AND
  EXISTS (SELECT 1 FROM `mem_net` WHERE `mem_net`.`calc_month` = 50 AND `mem_net`.`rank` > 6 ) AND
  EXISTS (SELECT 1 FROM `mem_net` WHERE `mem_net`.`calc_month` = 49 AND `mem_net`.`rank` > 6 ) AND
  EXISTS (SELECT 1 FROM `mem_net` WHERE `mem_net`.`calc_month` = 48 AND `mem_net`.`rank` > 6 ) AND
  EXISTS (SELECT 1 FROM `mem_net` WHERE `mem_net`.`calc_month` = 47 AND `mem_net`.`rank` > 6 ) AND
  EXISTS (SELECT 1 FROM `mem_net` WHERE `mem_net`.`calc_month` = 46 AND `mem_net`.`rank` > 6 )


Но вот как проверить это за весь год (т.е с 53 до 45)? OR использовать нельзя в момент ахинею выдавать начнет.
Наведите на мысль плиз....

уточните задачу:

1. вам надо выбрать контракты с выданым условием?
2. или надо выдать месяцы с данным есливоем
3. или надо выдать все записи которые удовлетворяют
условию (по 8 записей на попадание)?
4. контракт,ранк, калк_месяц -- уникальный набор или бывают повторения?
5. контракт, калк_месяц -- уникальный набор или бывают повторения?
6. сколько записей всего?с колько конреактов?
сколько уникальных контрактов-калк_месяц?
сколько уникальных контрактов-калк_месяц-ранк?
сколько уникальных контрактов-калк_месяц-(ранк>6)?
7. какие требования к скорости?
...
Рейтинг: 0 / 0
Помогите с логикой запроса.
    #38489402
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
8. это редко-исполняемый запрос/репорт
или часто-запрашиваемый запрос?
9. насколько часто меняются данные?
10. насколько важна актуальность ресультата?
(например допустима ли задержка по
актуальности на полдня, почаса?)
...
Рейтинг: 0 / 0
Помогите с логикой запроса.
    #38499700
hedgehogelez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
javajdbc,

На протяжении 8-ми месяцев contract должен выдержать rank > 6 по каждому месяцу своя таблица....

Проблема решилась скриптом.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
   	$agents_query = $subs::dbh->prepare('SELECT id,contract,rank,calc_month, (SELECT fio FROM net WHERE `mem_net`.contract = `net`.contract AND `net`.depo<>99992),(SELECT rank FROM net WHERE `mem_net`.contract = `net`.contract AND `net`.depo<>99992)
										 FROM mem_net WHERE '.$add_query.' 1 AND (SELECT 1 FROM net WHERE `mem_net`.contract = `net`.contract AND `net`.depo<>99992) AND contract<>0 order by contract');     $agents_query->execute();						
	@list_agent = $agents_query->fetchrow; # Подготовили из таблицы кого нужно
и выбрали
 while (@list_agent) {		
			$counter++;		
			if ($counter%2) {
				$bef1 = '<tr class="lr1">';
			}
			else {
				$bef1 = '<tr class="lr2">';
			}
		
			$page_content .= $bef1;
	
	 if ($temp != $list_agent[1]) {$temp=$list_agent[1];$calc_month=1;} 
	 else {if ($list_agent[2]>=$url_command{'rank'}) {$calc_month++;if($calc_month>=$month_count){
	 $page_content .= $bef2.$temp.$aft2;
	 $page_content .= $bef2.$list_agent[4].$aft2;
	 $page_content .= $bef2.&subs::rank_by_id($list_agent[5]).$aft2;
   # $page_content .= $bef2.&subs::print_month_by_id($list_agent[3]).$aft2;
	 $calc_month=1;} } else {$calc_month=1;}
	 }
			
	 $page_content .= $aft1;

	 @list_agent = $agents_query->fetchrow;
	}

    $agents_query->finish;
	$page_content .= '</table>';
...
Рейтинг: 0 / 0
14 сообщений из 39, страница 2 из 2
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите с логикой запроса.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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