Avatar billede sth Novice
11. oktober 2011 - 17:32 Der 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`)
)

Forslag til andre index er velkomne :-)
11. oktober 2011 - 19:53 #1
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)

sted dag segment max(qty) sum(qty)
sted1 15/3 segment1 25 150
sted1 15/3 segment2 33 85
sted1 16/3 segment1 15 111
sted2 17/3 segment1 42 98

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

Hvilket giver:

segment sum(qty)
segment1 359
segment2 85
Avatar billede sth Novice
12. oktober 2011 - 14:25 #2
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
Avatar billede sth Novice
12. oktober 2011 - 14:30 #3
prøver lige igen, men virker dog forsat ikke

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
12. oktober 2011 - 16:02 #4
Her er et svar. 

Og held og lykke med din select-inden-i-select.

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å.
17. oktober 2011 - 05:42 #5
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?
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester