Forum » Programiranje » SQL vprašanje
SQL vprašanje
korenje3 ::
https://www.w3schools.com/sql/trysql.as...
Mi lahko kdo pove, kako bi združil EmployeeID, ki bi prikazoval AVG količine za zadnjih 5 vnosov po datumu. Za vsak EmployeeID bi se moral izpisat zadnji datum od teh 5 podstavk za katere se dela povprečje. Filtrirat bi moral tudi časovno po datumu, tako da ne izpiše, če je starejše od nekega datuma.
SELECT [Orders].EmployeeID, [Orders].OrderDate, AVG([OrderDetails].Quantity) as Quantity FROM [Orders] INNER JOIN [OrderDetails] ON [Orders].OrderID = [OrderDetails].OrderID GROUP BY [Orders].EmployeeID, [Orders].OrderDate, Quantity ORDER BY Quantity DESC;
Mi lahko kdo pove, kako bi združil EmployeeID, ki bi prikazoval AVG količine za zadnjih 5 vnosov po datumu. Za vsak EmployeeID bi se moral izpisat zadnji datum od teh 5 podstavk za katere se dela povprečje. Filtrirat bi moral tudi časovno po datumu, tako da ne izpiše, če je starejše od nekega datuma.
i9-12900k; 32GB DDR5-6000 CL36; Nvidia RTX 3080 ti;
Gigabyte Aorus z690 master; Be Quiet Dark Power 12 1000W
Gigabyte Aorus z690 master; Be Quiet Dark Power 12 1000W
korenje3 ::
Rezultat bi moral biti enak kot je tale:
(select top 5 * from Orders where EmployeeID = 1 order by CustomerID desc) as a
union
(select top 5 * from Orders where EmployeeID = 2 order by CustomerID desc) as a
union
(select top 5 * from Orders where EmployeeID = 3 order by CustomerID desc) as a
...
sam to verjetno ni pravi pristop.
Verjetno nekaj takega:
samo da bi moral še sortirat po datumu.
(select top 5 * from Orders where EmployeeID = 1 order by CustomerID desc) as a
union
(select top 5 * from Orders where EmployeeID = 2 order by CustomerID desc) as a
union
(select top 5 * from Orders where EmployeeID = 3 order by CustomerID desc) as a
...
sam to verjetno ni pravi pristop.
Verjetno nekaj takega:
select EmployeeID,CustomerID,OrderDate from Orders x1 where (select count(*) from Orders x2 where x2.EmployeeID = x1.EmployeeID and x2.CustomerID <= x1.CustomerID ) <= 4 order by EmployeeID asc;
samo da bi moral še sortirat po datumu.
i9-12900k; 32GB DDR5-6000 CL36; Nvidia RTX 3080 ti;
Gigabyte Aorus z690 master; Be Quiet Dark Power 12 1000W
Gigabyte Aorus z690 master; Be Quiet Dark Power 12 1000W
Zgodovina sprememb…
- spremenil: korenje3 ()
Tody ::
Že vprasanje je cudno. Z subquery se da resit marsikaj potem mas pa se over funkcijo. Samo vedit mores kaj hoces. Mogoče se kak top ali limit pride prav
Lonsarg ::
Ja ni čisto vse 100% dorečeno(si kot tipični naročnik ki šele ko je serviran z pravilnim rezultatim zna bolj točno definirati želje hehe), tudi vsebinsko malce nesmiselna, zakaj povprečje posamezne postavke in ne povprečje zadnjih orderjev?
No kakorkoli, jaz sem to rešil z uporabo over da dobim zadnjih 5 postavk ter z uporabo subquerija da nato kasneje naredim average, ker pa hočemo pregledno formatiramo subquery v obliko CTEjev, ne tista stara nepregledna sintaksa, seveda w3schools ne podpira vseh funkcij in tega ne boš moral izvesti :)
No kakorkoli, jaz sem to rešil z uporabo over da dobim zadnjih 5 postavk ter z uporabo subquerija da nato kasneje naredim average, ker pa hočemo pregledno formatiramo subquery v obliko CTEjev, ne tista stara nepregledna sintaksa, seveda w3schools ne podpira vseh funkcij in tega ne boš moral izvesti :)
WITH FiltredSource AS (
SELECT
o.EmployeeID
, d.Quantity
, ROW_NUMBER() OVER (PARTITION BY o.EmployeeID, ORDER BY d.OrderDate DESC) AS OrderedByDate
FROM Orders o
INNER JOIN OrderDetails d ON d.OrderID = o.OrderID
WHERE d.OrderDate > '20190101'
)
SELECT
s.EmployeeID
, AVG(s.Quantity) AS AverageInLast5Positions
FROM FiltredSource s
WHERE s.OrderedByDate < 6 --do average on last 5
GROUP BY s. EmployeeID
Zgodovina sprememb…
- spremenil: Lonsarg ()
korenje3 ::
Recimo imaš izdelke, datum prodaje in ceno.
Rad bi pa za vsak posamičen izdelek za prodajo zadnjih 3 let in povprečje 5 zadnjih cen, znotraj tega časovnega območja...
da se izpiše 1 row za vsak izdelek s povprečno ceno in zadnjim datumom.
sem sem šele potem videl da tista internetna stran ne prepozna rownumber().
Rad bi pa za vsak posamičen izdelek za prodajo zadnjih 3 let in povprečje 5 zadnjih cen, znotraj tega časovnega območja...
da se izpiše 1 row za vsak izdelek s povprečno ceno in zadnjim datumom.
sem sem šele potem videl da tista internetna stran ne prepozna rownumber().
i9-12900k; 32GB DDR5-6000 CL36; Nvidia RTX 3080 ti;
Gigabyte Aorus z690 master; Be Quiet Dark Power 12 1000W
Gigabyte Aorus z690 master; Be Quiet Dark Power 12 1000W
Zgodovina sprememb…
- spremenil: korenje3 ()
korenje3 ::
Ok to je to. Zakon.
Zdej imam microsoft SQL server management studio in se lepo vidi, kaj se zgodi z rownumber.
Zdej imam microsoft SQL server management studio in se lepo vidi, kaj se zgodi z rownumber.
WITH FilteredSource AS ( SELECT [Product].ProductName, [Order].TotalAmount, [Order].OrderDate ,ROW_NUMBER() OVER (PARTITION BY [Product].ProductName ORDER BY [Order].OrderDate DESC) AS OrderedByDate FROM Customer INNER JOIN [Order] ON Customer.Id = [Order].CustomerId INNER JOIN OrderItem ON [Order].Id = OrderItem.OrderId INNER JOIN Product ON OrderItem.ProductId = Product.Id INNER JOIN Supplier ON Product.SupplierId = Supplier.Id WHERE [Order].OrderDate > CONVERT(datetime,'1.1.2014', 104) ) SELECT ProductName, TotalAmount, OrderDate, OrderedByDate FROM FilteredSource WHERE OrderedByDate < 6 --ORDER BY Product.ProductName DESC, [Order].TotalAmount DESC
i9-12900k; 32GB DDR5-6000 CL36; Nvidia RTX 3080 ti;
Gigabyte Aorus z690 master; Be Quiet Dark Power 12 1000W
Gigabyte Aorus z690 master; Be Quiet Dark Power 12 1000W
korenje3 ::
Oziroma če grupiramo je še tole.
SELECT ProductName, AVG(TotalAmount) as AVGAmmount, MAX(OrderDate) FROM FilteredSource WHERE OrderedByDate < 6 GROUP BY ProductName
i9-12900k; 32GB DDR5-6000 CL36; Nvidia RTX 3080 ti;
Gigabyte Aorus z690 master; Be Quiet Dark Power 12 1000W
Gigabyte Aorus z690 master; Be Quiet Dark Power 12 1000W
MrStein ::
Torej iščeš za MS SQL ?
No, za probati gre tule : http://sqlfiddle.com/ (če jim ni kaj crknilo)
Za Oracle pa je verjetno najbolje uporabljat njihov https://livesql.oracle.com (prvi ima na voljo oracle 11.2 ampak v preteklosti jim pogosto ni deloval)
No, za probati gre tule : http://sqlfiddle.com/ (če jim ni kaj crknilo)
Za Oracle pa je verjetno najbolje uporabljat njihov https://livesql.oracle.com (prvi ima na voljo oracle 11.2 ampak v preteklosti jim pogosto ni deloval)
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | SQL sortiranje JOINOddelek: Programiranje | 1194 (961) | korenje3 |
» | SQL poizvedbaOddelek: Programiranje | 3306 (2651) | awy |
» | [C#,SQL]Oddelek: Programiranje | 1267 (1180) | JanOlMajti |
» | Baza & c#Oddelek: Programiranje | 4206 (3264) | xardas |
» | [sql]-stevilka vrsticOddelek: Programiranje | 1155 (1018) | bmandl |