2016-03-12 4 views
0

Задача следующая: У меня есть записи о сделанных торгах, они характеризуются числом, временем торговли, продуктом и объемом. Для каждой торговли мне нужно увидеть время, продукт, объем и сумму объемов последних N сделок (сделанных до этой сделки) продукта этой торговли. Запрос должен быть выполнен MS Access. Данных выглядит следующим образом:MS Access: сумма ближайших значений N для конкретного типа записей

Number | Time | Product | Volume 
1  | 10 | A  | 20 
2  | 11 | B  | 20 
3  | 12 | B  | 25 
4  | 13 | A  | 20 
5  | 14 | A  | 40 
6  | 15 | B  | 20 
7  | 16 | C  | 70 
8  | 17 | A  | 20 
9  | 18 | B  | 60 
10  | 19 | B  | 10 

Ожидаемый результат для торгов 8 и 9, верхние 2 (N = 2):

Number | Time | Product | Volume | Sum 
    8  | 17 | A  | 20  | 60 
    9  | 18 | B  | 20  | 45 
+0

Номер и время зарезервированы, поэтому, чтобы выполнить запрос на доступ к MS Access, вы должны заключить эти имена полей в [], например [время], [число] –

+0

Как вы получаете 60 и 45? Перед временем 17 и 18, 'A = 20 + 20 + 40 = 80' и' B = 20 + 25 + 20 = 65' – Parfait

+0

Число уникально, это код для торговли (также возрастающий со временем). 60 и 45 приходят из-за того, что сумма только для верхней части 2. –

ответ

1

Это может быть сделано в MS Access, выбрав правильные строки, а затем агрегирование:

select max(t.number) as number, max(t.time) as time, t.product, 
     sum(volume) 
from trades t 
where t.time in (select top 5 t2.time 
       from trades as t2 
       where t2.product = t.product 
       order by t2.time desc 
       ); 
group by t.product; 
+0

Проблема в том, что мне нужны эти результаты для каждой сделки, а не только для последней (для первой торговой суммы будет 0) –

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