MySQL 5.5.8 Verlauf eines Artikels in einer History

Vandroiy

Mitglied
Hallo Community,

irgendwie komme ich gerade nicht weiter und würde gern mein Problem euch vorstellen und freue mich somit auf Gedanken anstöße die mir gerade fehlen um mein Probelm zu lösen.

Zu meiner Situation:
Ich habe einen Artikel der mit Hilfe einer History Table kontrolliert wird wo sich dieser Artikel zur Zeit im System befindet. Hier kann es passieren das der Artikel auch aus dem System entfernt wird und später der selbe Artikel wieder hinzugefügt wird.

Hier ein kleiner Ausszug aus meiner Table

Code:
id,artikel_id,lager_id,zustand,zeit,id_device
1,0,1,0,10:00,0
2,0,1,0,10:05,0
3,1,0,2,10:08,1
4,0,1,0,10:10,0
5,1,0,3,10:12,1
6,0,1,0,10:15,0
7,1,0,2,10:17,1
8,0,1,0,10:20,0

So sieht meine Table aus und ich möchte nun gerne eine Abfrage machen von wann bis wann war mein Artikel da drin
Also müsste das Ergebniss so aussehen
Code:
id,artikel_id,lager_id,zustand,zeit,id_device
3,1,0,2,10:08,1
4,0,1,0,10:10,0
5,1,0,3,10:12,1
7,1,0,2,10:17,1
8,0,1,0,10:20,0

Bis jetzt bekomme ich das hin
Code:
id,artikel_id,lager_id,zustand,zeit,id_device
3,1,0,2,10:08,1
4,0,1,0,10:10,0
5,1,0,3,10:12,1
6,0,1,0,10:15,0
7,1,0,2,10:17,1
8,0,1,0,10:20,0

Und das ganze habe ich so umgesetzt
Code:
SELECT 
    id,
    artikel_id,
    lager_id,
    zustand,
    zeit
FROM 
    history,
    (select zeit,lager_id from history where artikel_id=1) as t,
    (select min(zeit) as min_time from history where  artikel_id=1) as time
where 
    artikel_id = 1
    or
    find_in_set(id_device,t.lager_id)
    zeit >= time.min_time 
    
group by id
order by zeit desc

Ich freue mich auf eure Ideen und hoffe ich habe es verständlich erklärt.
 
So ich habe noch etwas weiter gebastelt und bin nun einen schritt weiter und zwar bekomme ich jetzt diese Ausgabe hin
Code:
id,artikel_id,lager_id,zustand,zeit,id_device
3,1,0,2,10:08,1
4,0,1,0,10:10,0
5,1,0,3,10:12,1

Das ganze habe ich mit einer zwischen Tabelle realisiert die mir denn Zeitraum wieder gibt
Code:
(
Select
            if(@befor <= @start_time ,@befor:=@start_time,@befor:=0),
            if(@next <= @end_time and @befor <= @next,@next:=@end_time,@next:=@i_endDate),
            IF(@start_time <= sample_time.zeit and sample_time.zustand= 3,@start_time:=sample_time.zeit,@start_time:=@befor) as start_time,
            IF(@end_time <= sample_time.zeit and sample_time.zustand= 2,@end_time:=sample_time.zeit,@end_time:=@next) as end_time
        from
            (Select @start_time:=0, @end_time:=0,@befor:=0,@next:=0) as vars,
            (Select * from history where artikel_id=@i_artikel_id order by zeit,zustand) as sample_time
        ) as t
    where t.end_time !=0
    ) as time
Diese Abfrage liefert mir die Werte
Code:
start_time,end_time
10:08,10:10
10:12,now()

Das ganze habe ich nun mit einander Verknüpft
Code:
Select
  *
from
   (
   Select
            if(@befor <= @start_time ,@befor:=@start_time,@befor:=0),
            if(@next <= @end_time and @befor <= @next,@next:=@end_time,@next:=@i_endDate),
            IF(@start_time <= sample_time.zeit and sample_time.zustand= 3,@start_time:=sample_time.zeit,@start_time:=@befor) as start_time,
            IF(@end_time <= sample_time.zeit and sample_time.zustand= 2,@end_time:=sample_time.zeit,@end_time:=@next) as end_time
        from
            (Select @start_time:=0, @end_time:=0,@befor:=0,@next:=0) as vars,
            (Select * from history where artikel_id=@i_artikel_id order by zeit,zustand) as sample_time
        ) as t
    where t.end_time !=0
    ) as time,
     history
where history.zeit between time.start_time and time.end_time
Somit habe ich aber leider nur den ersten Teil und nun weis ich nicht wie ich die nächste Zeit Angabe noch dazu machen kann das ich noch den Rest der Tabelle bekomme.

Und ich danke euch schonmal das so viele Leute sich das ganze schon angesehen haben.
 
Kleine Frage zu deinem gewünschten Ziel
Code:
id,artikel_id,lager_id,zustand,zeit,id_device
3,1,0,2,10:08,1     -> Artikel 1 einmal Eingang
4,0,1,0,10:10,0     -> Artikel 0 nicht vorhanden
5,1,0,3,10:12,1     -> Artikel 1 einmal vorhanden: KEINE ÄNDREUNG
7,1,0,2,10:17,1     -> Artikel 1 einmal vorhanden: KEINE ÄNDREUNG
8,0,1,0,10:20,0     -> Artikel 0 nicht vorhanden: KEINE ÄNDREUNG
Ich sehe da nicht wirklich was abgeht in dem Lager
 
Also manchmal frage ich mich wirklich ob das alles war sein kann :).

Hab das Problem so eben durch einen schreibfehler gelöst. Und zwar darf ich bei der Bearbeitung nicht mit now() arbeiten sondern brauche den letzten Eintrag aus der Tabelle. Somit lag mein Fehler darin das ich mit einem Zukunftswert gearbeitet habe.

So für alle hier die Lösung, und beachtet dabei das @i_endDate einen wert bekommt der in der Table vorhanden ist.
Code:
Select
  *
from
   (
   Select
            if(@befor <= @start_time ,@befor:=@start_time,@befor:=0),
            if(@next <= @end_time and @befor <= @next,@next:=@end_time,@next:=@i_endDate),
            IF(@start_time <= sample_time.zeit and sample_time.zustand= 3,@start_time:=sample_time.zeit,@start_time:=@befor) as start_time,
            IF(@end_time <= sample_time.zeit and sample_time.zustand= 2,@end_time:=sample_time.zeit,@end_time:=@next) as end_time
        from
            (Select @start_time:=0, @end_time:=0,@befor:=0,@next:=0) as vars,
            (Select * from history where artikel_id=@i_artikel_id order by zeit,zustand) as sample_time
        ) as t
    where t.end_time !=0
    ) as time,
     history
where history.zeit between time.start_time and time.end_time
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück