Наталья Дубровина
Гуру
(3055)
1 год назад
здесь нужно использовать "оконные функции", которые позволяют ранжировать записи. Т.е., как вариант, сперва выборку получить чтобы в одной строке были и текущие показатели, и показатели предыдущего месяца. Это будет вложенный запрос. А над ним уже запрос, считающий итоговую разницу и остальные joinы.
Помогите пожалуйста, я скоро с ума сойду, но я не понимаю, как это сделать.
У меня есть небольшая база данных с тремя таблицами.
Вот её структура:
Мне нужно показать суммарные объемы потребления по каждой услуге каждого счетчика за каждый месяц. Это я сделала:
SELECT CounterHouse_Part.HouseMeter_code AS [Код счётчика],
CounterHouse_Part.DateCalc AS [Расч. месяц],
spr_Service.Name AS [Название услуги],
CounterHouse_Part.VolumeVdn AS [Объем ИП],
CounterHouse_Part.VolumeIdls AS [Объем ОДН]
FROM CounterHouse_Part
INNER JOIN spr_HouseMeter
ON CounterHouse_Part.HouseMeter_code = spr_HouseMeter.Code
INNER JOIN spr_Service
ON spr_HouseMeter.Code = spr_Service.Code
ORDER BY [Код счётчика], [Расч. месяц], [Название услуги]
К первой выборке добавить разницу в объеме на индивидуальное потребление между текущим месяцем и последним месяцем, за который есть показания,
-- для каждого счетчика по каждой услуге.
Так например для счетчика housemeter_code = 2, для услуги 1, в расчетном месяце 2016-05-01 по значению VolumeIDLS известны показания 325. Последними известными показаниями по этому же счетчику по этой же услуге, являются показания за 2016-03-01 со значением 300. Соответственно разница между ними составляет 25 единиц.
Я начала делать, но не могу понять как добавить разницу между первым и последним и что к чему привязать:
SELECT CounterHouse_Part.HouseMeter_code AS [Код счётчика],
CounterHouse_Part.DateCalc AS [Расч. месяц],
spr_Service.Name AS [Название услуги],
? ? ? ? ? ? AS [Разница]
FROM CounterHouse_Part
INNER JOIN spr_HouseMeter
ON CounterHouse_Part.HouseMeter_code = spr_HouseMeter.Code
INNER JOIN spr_Service
ON spr_HouseMeter.Code = spr_Service.Code
GROUP BY CounterHouse_Part.HouseMeter_code, CounterHouse_Part.DateCalc, spr_Service.Name
ORDER BY [Код счётчика], [Расч. месяц], [Название услуги]