webForumDet fria alternativet
Logga in / Bli medlem

Hjälp med Group By

Databaser & SQL

1 svar · 302 visningar · startad av gmorken

Medlem sedan aug. 20082 inlägg
Frågan#1

Hej,
Skulle verkligen behöva lite hjälp
Jag har fastnat i en sql-fråga
Det här är vad jag vill göra:
Gruppera på ID och Location. Summera ihop Quantity och Cost (för både Sale och Purchase), samt ta MAX(Date) för alla ID där Type = Sale

Exempel data: Tabell OrderData:

ID  Date             Type         Location    Quantity     Cost
6   2008-10-02      Sale          A             4               3
6   2008-10-01      Purchase     D             88             13
5   2008-10-13      Sale          D             3               10
6   2008-10-14      Sale          D             16              16
6   2008-10-01      Purchase     X             1               13
6   2008-10-01      Purchase     D             22              11
6   2008-10-01      Purchase     C             54              65
5   2008-10-14      Sale           D             3               10
6   2008-10-31      Sale           D             6               12
4   2008-10-20      Purchase     D             5               70
4   2008-10-05      Purchase     D             2               1

Exempel på hur jag skulle vilja ha utdatat enligt ovanstående exempel: (Notera att ID 4 inte har nåt datum, för den har ingen Type med sale)

ID     Location       TotalQuantity     TotalCost     LastDateForSale
6      D                 32                    72                  2008-10-31  
6      A                 4                      3                   2008-10-02
4      D                 7                      71                
5      D                 3                      10                  2008-10

Nedan är den query jag har än så länge.
Problemet är att jag får sista datumet för både purchase och sale och jag vill endast ha sista datumet där type är sale.
Om jag sätter WHERE Type = 'Sale' så får jag inte rätt totalquantity och totalcost för dessa vill jag basera på både sale och purchase

SELECT
ID AS ID,
Location AS Location,
SUM(Quantit) AS TotalQuantity,
SUM(Cost) AS TotalCoast,
MAX(Date) AS LatestSalesDateForArticleInThatLocation

FROM
OrderData
Group By
ID, Location

Medlem sedan dec. 200012 464 inlägg
#2
SELECT
ID,
Location,
SUM(Quantit) AS TotalQuantity,
SUM(Cost) AS TotalCoast,
MAX(case when type = 'Sale' then Date end) 
  AS LatestSalesDateForArticleInThatLocation
 FROM OrderData
Group By ID, Location
256 ms totalt · 4 externa anrop · v20260731065814-full.5386d3bf
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)