2013-07-16 3 views
0

на следующем описывает то, что я хочу сделать с этой таблицей Left представляет собой таблицу с которым я хочу caluclate «current_value» для каждого события
Код 1 сбрасывает current_value дорожить
Code 2 добавляют значение current_value
Code3 уменьшает current_value со значениемсо ссылкой на псевдонимы вне подвыборки

Table Events      |column to be calculated         
eventId deviceId EventCode value |current_value        
1   1  1   2 |2       
2   1  2   1 |3       
3   1  2   1 |4       
4   1  2   1 |5        
5   1  3   2 |3        
6   1  2   2 |5        
7   1  1   1 |1        
8   1  2   2 |3   code 1: set      
9   1  2   1 |4   code 2: add      
10   1  2   1 |5   code 3: subtract       
11   1  3   3 |2        

Мой SQL код выглядит

Select             
    EventId,             
    deviceId,            
    (select last(value) from Events as E where E.EventCode = 1 and E.DeviceID = DeviceID and E.EventId<EventId) AS LastSetValue,             
    (select last(value) from Events as E where E.EventCode = 1 and E.DeviceID = DeviceID and E.EventId<EventId) AS FromEventID,            
    (select sum(value) from Events as E where E.EventCode = 2 and E.DeviceID = DeviceID and E.EventId between fromEventId and EventId) AS SumOfAdded,            
    (select sum(value) from Events as E where E.EventCode = 3 and E.DeviceID = DeviceID and E.EventId betweein FromEventId and EventId) AS SumOfSubtracted,            
    LastSetValue+SumOfAdded-SumofSubtracted as current_value             
from Events; 

Этот код, похоже, не работает, потому что в подселективных частях DeviceID выглядит внутренними временными таблицами DeviceID, когда я, как и внешний идентификатор устройства, тоже не работает, потому что он не может быть найден. С EventID также возникает эта проблема.

Любая помощь в том, что здесь неправильно, будет оценена по достоинству.

+0

Вы можете описав (без кода) что означает «текущая стоимость»? –

+0

Current_value - это длина устройства в момент его измерения (eventID привязан к дате или времени). Это набор начального значения плюс добавленные длины, а иногда части сокращаются от устройства. Иногда все устройство заменяется новым, снова начинающимся с нового начального значения. – hbl

ответ

0

Я не уверен, что я 100% понимаю ваш вопрос, но если я правильно читал вещи, вы должны просто нужен псевдоним внешнюю таблицы, как так:

Select             
    t.EventId,             
    t.DeviceId,            
    (select last(value) from Events as E where E.EventCode = 1 and E.DeviceID = t.DeviceID and E.EventId<t.EventId) AS LastSetValue,             
    (select last(value) from Events as E where E.EventCode = 1 and E.DeviceID = t.DeviceID and E.EventId<t.EventId) AS FromEventID,            
    (select sum(value) from Events as E where E.EventCode = 2 and E.DeviceID = t.DeviceID and E.EventId between fromEventId and t.EventId) AS SumOfAdded,            
    (select sum(value) from Events as E where E.EventCode = 3 and E.DeviceID = t.DeviceID and E.EventId between FromEventId and t.EventId) AS SumOfSubtracted,            
    LastSetValue+SumOfAdded-SumofSubtracted as current_value             
from Events t; 
+0

Я думаю, что это все, но в моем реальном столе это как ... из событий INNER JOIN что-то на что-то = что-то; где я помещаю псевдоним? – hbl

+0

@hbl - прямо между 'Events' и' INNER JOIN' like 'Events t INNER JOIN ...' –

+0

Может ли это быть MS Access, что он не работает? – hbl

Смежные вопросы