У меня есть таблица SQL со следующими столбцами: идентификатор счета, идентификатор должника, дата счета и сумма счета. где идентификатор счета-фактуры является уникальным.

Я пытаюсь создать дополнительный столбец со средней суммой счета. Таким образом, для каждой строки требуется средняя сумма счета-фактуры должника, но только для счетов-фактур, где дата счета-фактуры <= счет-фактура столбца.

Я не уверен, с чего начать, все идеи приветствуются

0
lsa952 31 Май 2019 в 11:28

2 ответа

Лучший ответ

Попробуй это-

SELECT 
A.Invoice_ID, 
A.debtor_ID, 
A.invoice_date,
A.invoice_amount,
(
    SELECT AVG(B.invoice_amount) 
    FROM your_table B 
    WHERE B.debtor_ID = A.debtor_ID
    AND B.invoice_date <= A.invoice_date
) AS average_invoice_amount
FROM your_table A
0
mkRabbani 31 Май 2019 в 08:34

Вы хотите использовать оконные функции:

select t.*,
       avg(invoice_amount) over (partition by debtor_id order by invoice_date) as running_average
from t;

Я настоятельно рекомендую это для коррелированного подзапроса, потому что он должен быть намного быстрее - даже если вы пытаетесь оптимизировать коррелированный подзапрос с помощью индексов.

0
Gordon Linoff 31 Май 2019 в 11:44