11. oktober 2011 - 17:32Der er
4 kommentarer og 1 løsning
Select inden i select
Hej
jeg har en SQL jeg gerne vil have hjælp til
select prod_stat_sted, day(prod_stat_tid ) as dag, month(prod_stat_tid ) as mdr, prod_stat_pl as pl_grup, prod_stat_segment as segment, max(prod_stat_qty) as qty from prod_stat where month(prod_stat_tid ) = month(curdate()) and prod_stat_sted <> '07' group by prod_stat_sted,prod_stat_pl,prod_stat_segment, day(prod_stat_tid ), prod_stat_sted order by mdr, dag, prod_stat_sted,prod_stat_pl,prod_stat_segment desc
Som det er nu får jeg data ud pr. sted, pr. dag, pr. segment Det jeg ønsker at få en samlet sum pr segment og jeg havde en ide om at det kunne jeg man evt klare ved at lave en select uden om ovenstående select.
Er der nogen der kan hjælpe?
min tabel ser sådan ud:
CREATE TABLE `prod_stat` ( `prod_stat_Id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `prod_stat_tid` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT 'dato og tid for opdateret', `prod_stat_sted` CHAR(3) NOT NULL DEFAULT '' COMMENT 'produktions sted' COLLATE 'latin1_danish_ci', `prod_stat_segment` VARCHAR(20) NOT NULL DEFAULT '' COMMENT 'vare segment' COLLATE 'latin1_danish_ci', `prod_stat_pl` VARCHAR(255) NULL DEFAULT NULL COMMENT 'produkt linje' COLLATE 'latin1_danish_ci', `prod_stat_qty` DECIMAL(10,2) UNSIGNED NULL DEFAULT NULL COMMENT 'mængde ind til nu (i dag)', PRIMARY KEY (`prod_stat_Id`), INDEX `index2` (`prod_stat_sted`, `prod_stat_segment`, `prod_stat_pl`) )
Du får nu max qty pr. sted pr.dag pr. segment. Du kan, som du velsagtens er klar over, også sagtens få total qty pr. sted/dag/segment ved i queryen at tilføje ..SUM(prod_stat_qty).
Hvis det ikke er tilstrækkeligt, men du vil have samlet sum pr. segment uanset sted og dag, så tvivler jeg om, at det kan lade sig gøre i den samlede query. Hvordan forestiller du dig at mysql skal skrive det ud? Hvis du tager total qty per sted/dag/segment med, så får du, for eksempel (forenklet)
Så total for segment1 er 359 og total for segment2 er 85. Hvor vil du have det vist? Det skal vel vises i en særskilt opstilling som resultat af et selvskilt query:
SELECT prod_stat_segment, SUM(prod_stat_qty) FROM prod_stat GROUP BY prod_stat_segment
jeg valgte at bruge den sql jeg selv havde lavet og så lave en beregning sum pr segment efterhånden som jeg fik dem indlæst på min side.
Det ejg havde forestillet var man kunne lave noget i stil med: select sum(qty) from select prod_stat_sted, day(prod_stat_tid ) as dag, month(prod_stat_tid ) as mdr, prod_stat_pl as pl_grup, prod_stat_segment as segment, max(prod_stat_qty) as qty from prod_stat where month(prod_stat_tid ) = month(curdate()) and prod_stat_sted <> '07' group by prod_stat_sted,prod_stat_pl,prod_stat_segment, day(prod_stat_tid ), prod_stat_sted order by mdr, dag, prod_stat_sted,prod_stat_pl,prod_stat_segment desc ) group by prod_stat_segment
men jeg kunne ikke få det tilat virke
kom med et svar så får du point for din tid / forslag
select sum(qty) from ( select prod_stat_sted, day(prod_stat_tid ) as dag, month(prod_stat_tid ) as mdr, prod_stat_pl as pl_grup, prod_stat_segment as segment, max(prod_stat_qty) as qty from prod_stat where month(prod_stat_tid ) = month(curdate()) and prod_stat_sted <> '07' group by prod_stat_sted,prod_stat_pl,prod_stat_segment, day(prod_stat_tid ), prod_stat_sted order by mdr, dag, prod_stat_sted,prod_stat_pl,prod_stat_segment desc ) group by prod_stat_segment
Du er klar over, ikke sandt, at i din indre select får du kun maximum quantitet per sted/dag/segment, ikke den totale quantitet, så hvis du får din ydre select til at virke vil den ikke give dig total quantitet per segment, kun totalen af maximum quantiteter? Hvis du vil have total quantity per sted/dag/segment for så at lægge dem sammen til total quantity for en segment, så skal du bruge SUM(prod_stat_qty) i stedet for MAX(prod_stat_qty). Men det har du vel rede på.
sth, du bad om svar for points, og det oprettede jeg, men så kom det ikke videre. Har du ændret mening? I så fald, opret selv svar og afslut spørgsmålet. Eller forventer du flere indlæg?
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.