SELECT c.partno as partno,MAX(c.inv)-MIN(c.inv) as sold,SUM(CASE WHEN c.date = c.last_date THEN profit else 0 END)*(MAX(c.inv)-MIN(c.inv)) as profit
FROM (SELECT partno,date,inv,retail-wholesale as profit,MAX(date) OVER (partition by partno) AS last_date FROM test1)c
GROUP BY c.partno
ORDER BY c.partno;
Используя оконную функцию , сначала добавьте новый столбец, чтобы отследить максимальную дату для каждой партии. Таким образом, внутренний запрос внутри FROM будет производить строки, подобные этим, с одним столбцом, добавленным к исходному набору данных,
| 1 | 2018-05-12 00:00:00 | 15 | $100 | $90 | **2018-05-13 00:00:00** |
Подсвеченное поле - это поле, добавленное к набору данных, которое является последней датой в диапазоне дат для этого номера детали!
Теперь из этого результата мы можем извлечь прибыль, проверив строку, в которой столбец даты равен новому добавленному столбцу, который по существу вычисляет прибыль за последнюю дату, вычитая оптовую продажу из розничной торговли и умножая ее на товары. продано.
PS: логика для проданных товаров - группировка по частям и вычитание MIN (Inv) из MAX (Inv)
Ссылка на SQL Fiddle