powered by simpleCommunicator - 2.0.57     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / подскажите с запросом
6 сообщений из 6, страница 1 из 1
подскажите с запросом
    #37214587
миробоев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
асе 11-9-2

вообщем есть три аналогичных таблицы
t1starttimeobjectpp 09.03.2011 14:00:00A5609.03.2011 14:00:00B7109.03.2011 15:00:00A 2309.03.2011 15:00:00B12
t2starttimeobjectzz09.03.2011 14:00:00A 10009.03.2011 14:00:00B9509.03.2011 15:00:00A 9809.03.2011 15:00:00B99
t3starttimeobjectwe09.03.2011 14:00:00A609.03.2011 14:00:00B809.03.2011 14:30:00A209.03.2011 14:30:00B309.03.2011 15:00:00A 409.03.2011 15:00:00B309.03.2011 15:30:00A 109.03.2011 15:30:00B1

нужно слить таблицы в одну с группировкой по времени, объект не нужен, т.е. примерно следующее получить:
starttimeppzzwe09.03.2011 14:00:001271001909.03.2011 15:00:0035999

делаю так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
select 
        t1.starttime as Starttime,
        sum(t1.pp) as 'pp', 
        max(t2.zz) as 'zz',
        sum(t3.we) as 'we'
from        
       t1, t2, t3
where 
      t1.starttime >="2011-03-09 14:00" 
and 
      t1.starttime < "2011-03-09 16:00"
and
	t1.starttime = t2.starttime 
and
	t1.starttime = t3.starttime
group by 
        t1.starttime

и очень долгая выборка, иногда сервер рестартует.
с двумя таблицами еще более приемлимо работает

как можно оптимизировать это?
или использовать новую таблицу куда выгружать поочередно из кадой таблицы эти данные?
...
Рейтинг: 0 / 0
подскажите с запросом
    #37214599
миробоев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
реально в таблицах всего записей

t1 - 375 964
t2 - 72 590
t3 - 186 065
...
Рейтинг: 0 / 0
подскажите с запросом
    #37215916
lagic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как минимум - запрос дает неверные данные ( перемножение по обьектам - например, для 09.03.2011 14:00:00 в каждой таблице по 2 записи - получается каждая запись из t1 учтется 4 раза )
К тому-же, если в какой-то таблице не будет записи за какое-то время, это время не засчитается

Я думаю, слить все в temp таблицу , затем сгруппировать
...
Рейтинг: 0 / 0
подскажите с запросом
    #37216208
миробоев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вообщем я этот же запрос вчера проверил в асе15 тоже самое по времени
если 2 таблицы то поярдка 10 секунд
если 3 таблицы то 290 секнуд

lagic
вы правы запрос немножко неверный (я делал в качестве примера)
правильно было бы так (чтоб группировал по часам)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
select 
        substring(convert(varchar( 10 ),t1.starttime, 112 ), 1 , 4 )+"-"+ 
        substring(convert(varchar( 10 ),t1.starttime, 112 ), 5 , 2 )+"-"+ 
        substring(convert(varchar( 10 ),t1.starttime, 112 ), 7 , 2 )+" "+ 
        substring(convert(varchar( 10 ),t1.starttime, 108 ), 1 , 3 )+"00" as Starttime, 
        
        sum(t1.pp) as 'pp', 
        max(t2.zz) as 'zz',
        sum(t3.we) as 'we'
from        
       t1, t2, t3
where 
      t1.starttime >="2011-03-09 14:00" 
and 
      t1.starttime < "2011-03-09 16:00"
and
	t1.starttime = t2.starttime 
and
	t1.starttime = t3.starttime
group by 
        substring(convert(varchar( 10 ),t1.starttime, 112 ), 1 , 4 )+"-"+ 
        substring(convert(varchar( 10 ),t1.starttime, 112 ), 5 , 2 )+"-"+ 
        substring(convert(varchar( 10 ),t1.starttime, 112 ), 7 , 2 )+" "+ 
        substring(convert(varchar( 10 ),t1.starttime, 108 ), 1 , 3 )


тока очень долго отрабатывает с тремя таблицами, а я собираюсь их еще больше использовать

просто задача несколько параметров из разных таблиц (как с получасовым интервалом так и с часовым)
вывести в одну таблицу, предварительно сгруппировоав данные
...
Рейтинг: 0 / 0
подскажите с запросом
    #37216361
lagic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
на 15 можно так
select
starttime,sum(t1.pp) as 'pp', max(t2.zz) as 'zz', sum(t3.we) as 'we'
from (
select starttime, t1.pp as 'pp', 0 as 'zz', 0 as 'we' from t1 where starttime >="2011-03-09 14:00" and starttime < "2011-03-09 16:00"
union all
select starttime, 0 as 'pp', zz as 'zz', 0 as 'we' from t2 where starttime >="2011-03-09 14:00" and starttime < "2011-03-09 16:00"
union all
select starttime, 0 as 'pp', 0 as 'zz', we as 'we' from t3 where starttime >="2011-03-09 14:00" and starttime < "2011-03-09 16:00"
) tt

group by starttime

а на 11.9.2 вначале union в таблицу
select starttime, t1.pp as 'pp', 0 as 'zz', 0 as 'we'
into #tt
from t1 where starttime >="2011-03-09 14:00" and starttime < "2011-03-09 16:00"
insert #tt
select starttime, 0 as 'pp', zz as 'zz', 0 as 'we' from t2 where starttime >="2011-03-09 14:00" and starttime < "2011-03-09 16:00"
insert #tt
select starttime, 0 as 'pp', 0 as 'zz', we as 'we' from t3 where starttime >="2011-03-09 14:00" and starttime < "2011-03-09 16:00"


а затем группировка (можно вначале сгруппировать)
...
Рейтинг: 0 / 0
подскажите с запросом
    #37216513
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
без планов запросов... - это гадание на кофейной гуще!
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / подскажите с запросом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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