Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / подскажите с запросом / 6 сообщений из 6, страница 1 из 1
13.04.2011, 16:12
    #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
13.04.2011, 16:16
    #37214599
миробоев
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
подскажите с запросом
реально в таблицах всего записей

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

Я думаю, слить все в temp таблицу , затем сгруппировать
...
Рейтинг: 0 / 0
14.04.2011, 12:52
    #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
14.04.2011, 13:51
    #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
14.04.2011, 14:50
    #37216513
cherrex_Den
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
подскажите с запросом
без планов запросов... - это гадание на кофейной гуще!
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / подскажите с запросом / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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