[ТЕМА ЗАКРЫТА]
Опции темы
13.10.2014 17:40  
BotMan
вариант №2

select ss.typename Документ, count(ss.typename) Количество from smdoclog s, ssobjecttypes ss
where (s.docdate = trunc(SYSDATE) or s.docdate = trunc(SYSDATE)-1)
and ss.objtype = s.doctype
group by ss.typename
 
13.10.2014 17:51  
vdm
Цитата:
Сообщение от BotMan
короче уперся в дату, запрос проходит без ошибки, но ничего не выводит...
В BETWEEN параметры должны идти от меньшего к большему.
И по условию смотреть нужно не дату документа, а время его изменения - eventtime.

Цитата:
и еще, как лучше писать через INNER JOIN или просто через Запятую?
Читал про проблемы с JOIN на версиях оракла ниже 10. Далее не в курсе.
Мне через запятую удобнее.
 
"Спасибо" vdm от:
13.10.2014 17:55  
OlegON
А при чем тут docdate? Вот, я написал бы вроде такого:
Код:
select ss.typename, count(ss.typename) 
from supermag.smdoclog s, supermag.ssobjecttypes ss
where s.eventtime>sysdate -1
and ss.objtype = s.doctype
group by ss.typename order by 2 desc;
давай тогда для понимания, выбери уникальные значения docdate из supermag.smdoclog и отсортируй их по возрастанию...
 
13.10.2014 18:25  
BotMan
Цитата:
Сообщение от OlegON
А при чем тут docdate?
ну я подумал что eventtime это время изменения документа, а docdate дата создания.
 
13.10.2014 18:33  
BotMan
select docdate from smdoclog
order by 1 asc
 
13.10.2014 18:35  
BotMan
select distinct docdate from smdoclog

order by 1 asc
 
13.10.2014 19:10  
OlegON
правильно, только вот для кода соответствующий тег на форуме есть, читаемость повышает.
еще аналогичная задачка - сделать вывод по количеству, как с документами, только с выводом и расшифровкой сотрудников. Т.е. в выборку выше по докам добавить детализацию по сотрудникам (smstaff).
 
13.10.2014 21:02  
Micle
Олег, я не силён в оракле, но полагаю, что через запятую джойнить таблицы несколько расточительно. Тут left join на мой взгляд смотрелся бы куда лучше. Или у оракла нет такового (сильно сомневаюсь) ?
 
13.10.2014 21:53  
OlegON
Цитата:
Сообщение от Micle
Олег, я не силён в оракле, но полагаю, что через запятую джойнить таблицы несколько расточительно. Тут left join на мой взгляд смотрелся бы куда лучше. Или у оракла нет такового (сильно сомневаюсь) ?
Я тоже не силен в программировании Oracle, но в нем поддерживается LEFT JOIN (т.е. ANSI-нотация) и есть LEFT JOIN, который можно было бы записать так
Код:
select ss.typename, count(ss.typename) 
from supermag.smdoclog s, supermag.ssobjecttypes ss
where s.eventtime>sysdate -1
and ss.objtype = s.doctype(+)
group by ss.typename order by 2 desc;
т.е. в оракловой нотации. ANSI-варианты кое-как терпимо и без багов стали работать в 11 версии, хотя сам Том Кайт рекомендовал их использование еще в 10 версии. Я с самого начала пользовался оракловой нотацией, поэтому ANSI пользоваться не люблю, не умею. Но не поленился, переписал и сравнил планы
Код:
select ss.typename, count(ss.typename) 
from supermag.ssobjecttypes ss
left join supermag.smdoclog s on
(ss.objtype = s.doctype and s.eventtime>sysdate -1)
group by ss.typename order by 2 desc;
практически идентичны, т.е. расход ресурсов даже на весьма значительной по размерам БД абсолютно одинаковый.
 
"Спасибо" OlegON от:
14.10.2014 11:33  
BotMan
в общем вот, что получилось, не уверен что правильно, так как не знаю, что за что цеплять
Код:
select ff.serverlogin, p.typename,  count(p.typename) from smstaff ff, 
(select s.username, ss.typename from supermag.smdoclog s, supermag.ssobjecttypes ss
where s.eventtime>sysdate -1
and ss.objtype = s.doctype(+)
) p
where ff.serverlogin=p.username
group by p.typename, ff.serverlogin order by 1 desc
и хотел спросить, что означает этот (+) ??
 
 


Опции темы



Часовой пояс GMT +3, время: 19:24.

Все в прочитанное - Календарь - RSS - - Карта - Вверх 👫 Яндекс.Метрика
Форум сделан на основе vBulletin®
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.