2015-04-10 4 views
0

необходимо подготовить годовой отчет по проданным предметам, поэтому подготовлен один fiddle для этого ... у меня есть таблица цен для каждого элемента ... так, когда вы выбираете цену товара, мне нужна последняя цена по цене_dt. .. думал просто на первый .. но потратил больше времени, чем то, что я должен ... :(sql сумма по последней цене

отчет для полных проданных ежегодно

price table 
'I001', '2014-03-31', '200.00' 
'I002', '2014-03-31', '200.00' //old price 
'I002', '2014-05-31', '150.00' //latest price 
'I003', '2015-03-31', '200.00' 
'I004', '2015-07-31', '120.00' 
'I005', '2015-07-31', '180.00' 


items 
'I001', '2014-06-30', 'SOLD' 
'I002', '2014-06-30', 'SOLD' 
'I003', '2015-06-30', 'SOLD' 
'I004', '2015-08-30', 'SOLD' 
'I005', '2015-08-30', 'UNSOLD' 


I001 & I002 are sold in 2014 ('SOLD' status in items table) 
I003 & I004 are sold in 2015 (but I005 is not sold yet in year 2015) 

цена i002 составляет 150 (как это последняя цена)

, когда я суммирую цену за каждый элемент, я должен рассмотреть l ATEST цены

так мой окончательный вывод должен быть

2014  350 
2015  320 
+0

и извините за плохой английский .... :) – user4773404

+5

SQL Fiddle хорош, но вы должны включить в свои образцы данных выборки и желаемые результаты. Ваш вопрос довольно неоднозначен. Не совсем понятно, что вы пытаетесь сделать. –

+0

Извините, отредактируйте – user4773404

ответ

0

Вы должны присоединиться к таблице цен снова с максимальной датой, как

select 
year(i.sell_date), 
sum(p.price) from items i 
left join price p ON i.item_id = p.item_id 
join (
    select item_id,max(price_dt) as price_dt from price 
    group by item_id 
)x on x.price_dt = p.price_dt and x.item_id = p.item_id 
where i.status = 'SOLD' 
group by year(i.sell_date); 
+0

только для любопытных есть ли какое-либо решение подзапроса .... или это сам подзапрос – user4773404

+0

Да его некоррелированный подзапрос. –

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