Wyliczenie procentowego udziału miesiąc do miesiąca poprzedniego w SQL

0

Cześć,
Mam pytanie. Potrafię odpytać bazę w DAX i próbuję teraz wszystko odwzorować w SQL.
Nie mam pojęcia jak ( i czy w ogóle) można w SQL wykonać takie obliczenie pokazujące procentowy stosunek msc vs msc (np luty 2007 do styczeń 2007)
W DAX są funkcję Time Intelligence więc jest to oczywiste , że wybieram predefiniowaną funkcję np. PREVIOUSMONTH i już po sprawie, natomiast da się to obliczyć w SQL????.
Poniżej załączam mój kod z DAX w celu zobrazowania tego o co mi chodzi.
Chciałbym pogrupować po roku i miesiącach i dodać kolumnę wyliczającą procentowy udział msc do msc poprzedniego.

EVALUATE
ADDCOLUMNS(
SUMMARIZE(
FactInternetSales,
DimDate[Date].[Rok],
DimDate[Date].[Miesiąc]
),
"Wartość",
VAR SA = [Total Sales Amount]
VAR SA_PM =
CALCULATE(
[Total Sales Amount],
PREVIOUSMONTH(
DimDate[Date]
)
)
RETURN
DIVIDE(
SA-SA_PM,
SA_PM,
0
)
)
ORDER BY [Rok],[Miesiąc] desc
screenshot-20210104232228.png

Z góry dziękuję.
Pozdrawiam

1
with t(rok, miesiac, wartosc) as
(values
(2020,1,123),
(2020,2,120),
(2020,3,100),
(2021,1,124),
(2021,2,121),
(2021,3,103)
)
select 
	rok, 
	miesiac, 
	wartosc, 
	lag(wartosc) over(partition by rok) pop_miesiac, 
	lag(wartosc) over(partition by miesiac) pop_rok,
	(100.*wartosc/(lag(wartosc) over(partition by rok)))::numeric(10,2) procent_miesiac,
	(100.*wartosc/(lag(wartosc) over(partition by miesiac)))::numeric(10,2) procent_rok
from t
0

@Marcin.Miga:
Cześć,
Dziękuję za odpowiedź ale niestety nic z tego nie rozumiem.
Może na prostszym przykładzie mógłbyś mi napisać kod - chodzi tylko z zasadę jak to się pisze.
Mam trzy tabelę (screen) i zadanie poniżej.

pokaż o ile procentowo wzrosły/spadły wartości zamówień produktów w styczniu w stosunku do grudnia 2016

tabele.pngtabele.png

przykładowy wynik:
nazwa produktu wzrost/spadek%
Prod A 12,5
Prod B -1,23

Bardzo dziękuję
Pozdrawiam

0

Daj sqlfiddle ze strukturą i danymi.

0

Mam trzy tabele

  1. Order
    2.Order_Item
    3.Product
    Tabele 1.png

Chciałbym zapytaniem SQL stworzyć taką tabelę.
Dane.png
Pogrupowane po roku i miesiącu i wyliczone 2 kolumny :
Gdzie "Cena" to pomnożone Quantity ( z tabeli Order_Item) i Price ( z tabeli Product) - oczywiście wszystko połączone relacją.
Gdzie Msc vs msc % to stosunek miesiąca bieżącego do poprzedniego (w procentach)

Da się takie coś wyliczyć?

Wielkie dzięki za pomoc.

0

@Przemo_Mas: Jasne że się da banalnym query

select YEAR(o.date) as ROK, FORMAT((o.date),'MMMM','pl-PL') as Miesiac, SUM(oi.Quantity * p.Price) as Cena, FORMAT(((SUM(oi.Quantity * p.Price) - LAG(SUM(oi.Quantity * p.Price), 1,0) OVER (ORDER BY CONCAT(YEAR(o.date),MONTH(o.date)))) / CASE WHEN (LAG(SUM(oi.Quantity * p.Price), 1,0) OVER (ORDER BY CONCAT(YEAR(o.date),MONTH(o.date)))) = 0 THEN SUM(oi.Quantity * p.Price) ELSE LAG(SUM(oi.Quantity * p.Price), 1,0) OVER (ORDER BY CONCAT(YEAR(o.date),MONTH(o.date))) END ),'P') as 'Msc vs msc %'
from [dbo].[Order] o
left join [dbo].[Order_item] oi ON o.ID = oi.Order_ID
left join [dbo].[Product] p ON oi.Product_ID = p.ID
group by CONCAT(YEAR(o.date),MONTH(o.date)), YEAR(o.date), FORMAT((o.date),'MMMM','pl-PL')

screenshot-20210107184130.png

0

Dzięki Damian,

Czy banalnym to nie wiem ale muszę do tego przysiąść.
DAX jest chyba prostszy i bardziej oczywisty . Takie przynajmniej moje spostrzeżenia. Tyle że na razie mało uniwersalny.
Jeszcze raz bardzo dziękuję.
Pozdrawiam

0

@Przemo_Mas: Każdy język był stworzony w innym celu a to że potem się rozbudował to już inna kwetia. Jak widzisz można "banalne" to query nie było ale jak widzisz jest możliwe do zrobienia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1