Håber felterne forklarer sig selv, men ellers så: Varenummer - variant1 - variant2 - variant3 - lager - (dato for lagerbevægelse)
Jeg vil gerne lave en select, for en bestemt dato, som viser lagerværdien for alle varenumre på den pågældende dato. hvis der ikke er en linje med indtastede dato for varenummeret, skal den tage den nærmeste dato, som er mindre end den indtastede.
Jeg lavede denne query (som naturligvis kun virker, hvis Date feltet i tabellen har data type DATE eller en anden type som man kan søge og sortere på:)
SELECT *, MAX(Date) FROM Stocktable WHERE Date <= '2011-10-23' GROUP BY itemnr;
Der er datoen 'hard-coded.' Det ville naturligvis være at foretrække, hvis du kunne indføre datoen i en variabel. Hvordan udfører du søgningen? Fra en applikation, for eksempel skrevet i php? I så fald kunne koden være:
<?php $dato = [her indfører du datoen eller tager den fra en html formular eller lignende]; $result = mysql_query("SELECT *, MAX(Date) FROM Stocktable WHERE Date <= '$dato' GROUP BY itemnr;"); ?>
Jeg sidder og laver rapporter i FastReport og Hvis jeg laver en GROUP BY, så dur Select * ikke. Så jeg har lavet følgende:
SELECT t1.itemnr, t1.s1, t1.s2, t1.s3, t1.stock, MAX(t1."DATE") FROM hstock t1 WHERE t1."DATE" <= :PARDATE and t1.stock <> 0 GROUP BY t1.itemnr, t1.s1, t1.s2, t1.s3, t1.shstart
Problemet er så bare, at jeg får for mange linjer ud. Hvis jeg sætter dato til eks. '21.01.2011' så for jeg alle linjer ud og ikke kun de nyeste, for hvert varenummer-s1-s2-s3
Så du skal have sidste status per varenummer-s1-s2-s3 og ikke kun per varenummer. Ja, så skal du naturligvis have GROUP BY itemnummer, s1, s2, og s3. Men hvad er shstart? Den forekommer ikke i queryen og heller ikke i den (forenklede) tabel du viser. Jeg vil gætte på, at det er den der gør at du får for mange linjer. Hvad sker der hvis du kun grupper på itemnr, s1, s2, og s3?
Det lyder mystiskt at du ikke kan bruge * når du bruger GROUP BY. Hvad sker der så? Er det fordi du bruger FastReport (som jeg ikke kender)? I phpmyadmin og når jeg kalder fra php har jeg ikke mødt problemer med * og GROUP BY.
Og jeg er nysgerrig efter hvad datatypen er for Date feltet i tabellen.
SELECT t1.itemnr, t1.s1, t1.s2, t1.s3, t1.stock, MAX(t1."DATE") FROM hstock t1 WHERE t1."DATE" <= :PARDATE and t1.stock <> 0 GROUP BY t1.itemnr, t1.s1, t1.s2, t1.s3, t1.stock
var det rigtige. Sorry :-)
Hvis jeg bruger select * og group by får jeg: Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause). Og det er FastReport, som er skyld i dette.
SELECT t1.itemnr, t1.s1, t1.s2, t1.s3, t1.stock, MAX(t1."DATE") FROM hstock t1 WHERE t1."DATE" <= '21.01.2011' and t1.stock <> 0 GROUP BY t1.itemnr, t1.s1, t1.s2, t1.s3, t1.stock
Når du vil have det vist per item-s1-s2-s3, hvorfor grupperer du så på stock? Jeg foreslog i #4 GROUP BY itemnr, s1, s2, s3. Og ikke andet. Har du prøvet det? Hvad får du så?
Hvis jeg bruger denne: SELECT t1.itemnr, t1.s1, t1.s2, t1.s3, t1.stock, MAX(t1."DATE") FROM hstock t1 WHERE t1."DATE" <= '21.01.2011' and t1.stock <> 0 GROUP BY t1.itemnr, t1.s1, t1.s2, t1.s3
får jeg: Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause).
hvis jeg SELECT t1.itemnr, t1.s1, t1.s2, t1.s3, MAX(t1."DATE") FROM hstock t1 WHERE t1."DATE" <= '21.01.2011' and t1.stock <> 0 GROUP BY t1.itemnr, t1.s1, t1.s2, t1.s3
Får jeg de rigtige linjer, men så mangler jeg stock værdien
Er bange for det nok ikke kan lavet på denne måde i fastreport :S
SELECT t1.itemnr, t1.s1, t1.s2, t1.s3, t1.stock, MAX(t1."DATE") FROM hstock t1 WHERE t1."DATE" <= '21.01.2011' and t1.stock <> 0 GROUP BY t1.itemnr, t1.s1, t1.s2, t1.s3
er SQL-teknisk den rigtige hvis du vil have udskrevet stockværdierne men ikke grupperet på stockværdierne. Ingen tvivl om den sag. Hvis fastreport ikke kan lave det, så vil jeg foreslå, at du finder en andet applikation.
Jeg er bange for, at jeg ikke kan hjælpe dig videre, og jeg er i øvrigt af tidshensyn nødt til at stoppe her. Jeg mener at have svaret på dit spørgsmål, hvordan man i MYSQL laver et udtræk til at få de færdier du specificerede. Hvis du mener som jeg, så accepter venligst mit svar #2. Hvis du ikke mener jeg har været til hjælp, så opret selv et svar og accepter det. Hvis du vil holde fast ved fastreport, så har du den mulighed at oprette et nyt spørgsmål, hvor du for eksempel i overskriften nævner fastreport (for at tiltrække medlemmer der kender dertil). Det ville være godt i et sådant nyt spørgsmål at inkludere det du viser i #9.
Jeg er enig med dig i at select'en er korrekt, men mit problem nok ligger fastreport. den kan jeg desværre ikke skifte, da folk over mig mener, at det der rigtige værktøj ;-)
takker for et korret svar og din tid
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.