SQL: Как найти начальное значение и значение в каждой строке, зная текущее значение? - PullRequest
0 голосов
/ 21 июня 2019

Хорошо, это странно, и я попытаюсь объяснить, что я имею в виду.

Допустим, я знаю текущий запас sku (на данный момент):

select sku, sum(stock)
from stock
where sku = '1234'
group by sku

и тогда у меня есть продажи для этого sku:

select * 
from sales
where sku = '1234' and saleDate > SOME_DATE   <---- Get sales for a certain period
order by saleDate desc

И я хочу выяснить, каков был уровень запасов и что делало его таким на определенную дату.

Таким образом, результат должен выглядеть следующим образом:

Current stock @ 21.06.2019 is 50     <---- I know this value

20.06.2019: stockStart = 53, sold = 3, stockEnd = 50   <---- I know the sales, don't know the stock
19.06.2019: stockStart = 58, sold = 5, stockEnd = 53   <---- I know the sales, don't know the stock
18.06.2019: stockStart = 60, sold = 2, stockEnd = 58   <---- I know the sales, don't know the stock
17.06.2019: stockStart = 68, sold = 8, stockEnd = 60   <---- I know the sales, don't know the stock

Initial stock @ 16.06.2019 was 68    <---- Don't know this value

Как будет выглядеть SQL-запрос, чтобы получить что-то вроде этого, где я знаю текущую акцию, я знаю, что было продано, но я хочу найти:

  • Запас на каждой строке продаж.
  • Конечный запас. (По сути, это последняя строка столбца stockStart)

1 Ответ

0 голосов
/ 21 июня 2019

Проверьте следующий запрос.Существуют некоторые встроенные и дополнительные запросы, которые могут вызвать проблемы с производительностью.Но, учитывая ваши требования, я чувствую, что следующий запрос предоставит вам хотя бы несколько указаний.

DECLARE @FromDate DATE = '20190619'

SELECT  saleDate Date,
Current_Stock + ISNULL(sold_from_today,0) stockStart,
Sold,
Current_Stock + ISNULL(sold_from_tomorrow,0) stockEnd 
FROM
(
    Select *,
    (select sku, sum(stock) from stock where sku = '1234') Current_Stock,
    --68 Current_Stock,
    (SELECT SUM(Sold) FROM sales B WHERE B.saleDate >= A.saleDate AND  B.saleDate  > @FromDate  AND B.sku = '1234') sold_from_tomorrow,
    (SELECT SUM(Sold) FROM sales B WHERE B.saleDate > A.saleDate AND  B.saleDate  > @FromDate AND B.sku = '1234') Usold_from_today
    from sales A
    where A.sku = '1234' and A.saleDate > @FromDate
)A
ORDER BY saleDate DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...