ВЫБЕРИТЕ AVG (invoiceamount) для каждого должника, где дата <строка даты - PullRequest
0 голосов
/ 31 мая 2019

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

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

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

Ответы [ 2 ]

0 голосов
/ 31 мая 2019

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

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

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

0 голосов
/ 31 мая 2019

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

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
...