Суммирование с группировкой возвращает не все данные

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
Gage
Сообщения: 18
Зарегистрирован: 26 ноя 2005, 20:17

Суммирование с группировкой возвращает не все данные

Сообщение Gage » 14 мар 2007, 14:29

Firebird-2.0.1.12810. СуперСервер. БД с ODS 11.
Создаю view

Код: Выделить всё

recreate view test
(ID, EventCode, EventDate, EventLength, RestDate)
as
select 
   ID, 
   EventCode, 
   EventDate, 
   EventLength, 
   iif(EventCode < 0, rdb$set_context('USER_SESSION', 'rest' || ID,
      EventDate), rdb$get_context('USER_SESSION', 'rest' || ID))
from vDrivers2
where not (EventCode<0 and EventLength < 9.0/24)
делаю выборки
1.

Код: Выделить всё

select EventLength, RestDate from Test
Результат:

Код: Выделить всё

EVENTLENGTH     RESTDATE  
34.046162836    0  
28.000127141    0  
9.186792707     2007-01-30 08:32:14.5310  
0.012951389     2007-02-06 17:25:30.0150  
6.458831019     1  
0.041805556     2007-03-06 17:44:20.0000  
0.042465278     2007-03-06 17:44:20.0000  
0.38318287      1  
0.289571759     2007-03-13 14:37:16.0000  
0.189907407     2007-03-13 14:37:16.0000  
0.163449074     2007-03-13 14:37:16.0000  
2.

Код: Выделить всё

select RestDate, Sum(EventLength)
from Test
group by RestDate
Результат

Код: Выделить всё

RESTDATE                    SUM  
1                           68.888303866  
2007-01-30 08:32:14.5310    9.186793065  
2007-03-13 14:37:16.0000    0.740150463  
В последнем запросе не все значения из поля RestDate участвуют в группировке. Почему?
Помогите разобраться, пожалуйста!

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 14 мар 2007, 14:35

А ты выполни запрос

Код: Выделить всё

select EventLength, RestDate from Test order by 2
два раза подряд и посмотри на результат.

Gage
Сообщения: 18
Зарегистрирован: 26 ноя 2005, 20:17

Сообщение Gage » 14 мар 2007, 14:47

Выполнил. Вот результат

Код: Выделить всё

EVENTLENGTH    RESTDATE  
34.046162836   1  
28.000127141   1  
6.458831019    1  
0.38318287     1  
9.211988378    2007-01-30 08:32:14.5310  
0.012951389    2007-03-13 14:37:16.0000  
0.041805556    2007-03-13 14:37:16.0000  
0.042465278    2007-03-13 14:37:16.0000  
0.189907407    2007-03-13 14:37:16.0000  
0.163449074    2007-03-13 14:37:16.0000  
0.289571759    2007-03-13 14:37:16.0000  
Какая-то ерунда. Вместо нужной даты пишет другую.
Или я чего-то не понимаю?

Gage
Сообщения: 18
Зарегистрирован: 26 ноя 2005, 20:17

Сообщение Gage » 14 мар 2007, 14:56

Все. Понял. Спасибо. :)

Ответить