Hallo #,
wieder diese vermaledeite Group By,
das kapier ich nie ;(
Folgende Tabellen habe ich:
WSProgress: WSId, TheDate, TheTime, TheValue (WS = Workstep = Arbeitsgang)
WorkStep: WSId, ProjectId
Project: ProjectId
in WSProgress stehen Fertigungsfortschritte drin, etwa so
WSId TheDate TheTime theValue
3 '2.1.2007' '12:30' 50
3 '3.1.2007' '15:30' 55
3 '4.1.2007' '17:22' 65
4 '2.1.2007' '11:30' 10
5 '2.1.2007' '11:30' 10
4 '2.2.2007' '11:22' 25
also pro Arbeitsgang mehrere.
Ich bräuchte jetzt eine Liste aller Arbeitsgänge eines Projektes,
und von denen
a) die Fortschritte bis zu einem bestimmten Datum
aber pro Arbeitsgang nur einen Fortschritt
b) die aktuellesten
aber pro Arbeitsgang nur einen Fortschritt
Ich habe das zur Zeit per Subselect für b
(a ist ja ableitbar)
SQL-Code:
select
wsprogress1.wsid, wsprogress1.thedate, wsprogress1.thevalue
workstep.wsid as ws_id, project.projectid as project_id
from wsprogress wsprogress1
join workstep on workstep.wsid=wsprogress1.wsid
join project project on project.projectid=workstep.projectid
where (project.id=110)
and (wsprogress1.thedate in
(select max(wsprogress2.thedate)
from wsprogress wsprogress2
where wsprogress2.wsid=wsprogress1.wsid))
Das unnötige join auf die Projekte-Tabelle ist OK
(intern sind es noch ein paar Joins mehr).
Per GroupBy bekomme ich immer alle Arbeitsgänge und alle Fortschritte,
ich aber nur den mit dem höchsten Datum
Klappt es mit GroupBy überhaupt mit meinem Wunsch.
Danke
Heiko