Я искал по форуму и нашел здесь одно сообщение, которое немного отражает мою проблему: Рассчитать среднее значение для Top n в сочетании с SQL Group By .
My ситуация:
- У меня есть таблица tblWEIGHT, которая содержит: ID, Date, idPONR, Weight
- У меня есть вторая таблица tblSALES, которая содержит: ID, Date, Sales, idPONR
- У меня есть третья таблица tblPONR, которая содержит: ID, PONR, idProduct
- И четвертую таблицу tblPRODUCT, которая содержит: ID, Product
Ссылка:
- tblWEIGHT.idPONR = tblPONR.ID
- tblSALES.idPONR = tblPONR.ID
- tblPONR.idProduct = tblPRODUCT.ID
maintable моего запроса - tblSALES. Я хочу, чтобы все мои продажи были перечислены со скользящим средним из 5 основных весов ПРОДУКТА, где дата веса меньше даты продажи, а продукт совпадает с проданным. ВАЖНО, чтобы результат не был сгруппирован по дате. Мне нужны все записи tblSALES.
Я дошел до того, чтобы получить верхний 1 вес, но я не могу получить его скользящее среднее. Запрос, который показывает первую 1, следующий, и я предполагаю, что запрос, который мне нужен, будет очень похож на него.
SELECT tblSALES.ID, tblSALES.Dato, tblPONR.idPRODUCT,
(
SELECT top 1 Weight FROM tblWEIGHT INNER JOIN tblPONR ON tblWeight.idPONR = tblPONR.ID
WHERE tblPONR.idPRODUCT = idPRODUCT AND
SALES.Date > tblWEIGHT.Date
ORDER BY tblWEIGHT.Date desc
) AS LatestWeight
FROM tblSALES INNER JOIN VtblPONR ON tblSALES.idPONR = tblPONR.ID
это не мой точный запрос, так как im dani sh и я не имел бы смысла. Я знаю, что я не должен использовать Date в качестве имени поля.
Я предполагаю, что запрос filan будет примерно таким:
SELECT tblSALES.ID..... avg(SELECT TOP 5 weight .........)
, но при этом я продолжаю получать ошибку при макс.1 записи может быть возвращенный этим подзапросом
Последний вопрос. Как мне сделать запрос, который создает скользящее среднее из пяти верхних весов моего проданного продукта, если дата веса предшествует дате продажи продукта?
EDIT Sampledata: DATEFORMAT: dd / мм / гггг
tblWEIGHT
ID Date idPONR Weight
1 01-01-2020 1 100
2 02-01-2020 2 200
3 03-01-2020 3 200
4 04-01-2020 3 400
5 05-01-2020 2 250
6 06-01-2020 1 150
7 07-01-2020 2 200
tblSALES
ID Date Sales(amt) idPONR
1 05-01-2020 30 1
2 06-01-2020 15 2
3 10-01-2020 20 3
tblPONR
ID PONR(production Number) idProduct
1 2521 1
2 1548 1
3 5484 2
tblPRODUCT
ID Product
1 Bricks
2 Tiles
Желаемый результат прочтите комментарии для AvgWeight
tblSALES.ID tblSALES.Date tblSales.Sales(amt) AvgWeigt
1 05-01-2020 30 123 -->avg(top 5 newest weight of both idPONR 1 And 2 because they are the same product, and where tblWeight.Date<05-01-2020)
2 06-01-2020 15 123 -->avg(top 5 newest weight of both idPONR 1 And 2 because they are the same product, and where tblWeight.Date<06-01-2020)
3 10-01-2020 20 123 -->avg(top 5 newest weight of idPONR 3 since thats the only idPONR with that product, and where tblWeight.Date<10-01-2020)