AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi je ein Eintrag mit dem höchsten Datum (Group By ?)
Thema durchsuchen
Ansicht
Themen-Optionen

je ein Eintrag mit dem höchsten Datum (Group By ?)

Ein Thema von hoika · begonnen am 28. Feb 2008 · letzter Beitrag vom 5. Mär 2008
Antwort Antwort
Seite 1 von 2  1 2      
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#1

je ein Eintrag mit dem höchsten Datum (Group By ?)

  Alt 28. Feb 2008, 16:24
Datenbank: FB • Version: 1.5 • Zugriff über: egal
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
Heiko
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: je ein Eintrag mit dem höchsten Datum (Group By ?)

  Alt 28. Feb 2008, 17:08
Bei einem Join bezieht sich die Gruppierung auf die gejointe Datenmenge.
Du müsstest das mit einer SP Lösen oder bei einem update auf FB2 mit einer DERIVED TABLE.
Markus Kinzler
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: je ein Eintrag mit dem höchsten Datum (Group By ?)

  Alt 28. Feb 2008, 17:15
Hallo,

aha, also bin ich nicht auf dem falschen Dampfer.

Danke


Heiko
Heiko
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: je ein Eintrag mit dem höchsten Datum (Group By ?)

  Alt 29. Feb 2008, 01:44
Vielleicht so...

SQL-Code:
SELECT 'aAS typ, wp.wsid, wp.thedate, wp.thevalue,
       s.wsid AS ws_id, p.projectid AS project_id
FROM wsprogress wp
INNER JOIN workstep s
  ON wp.wsid = s.wsid
INNER JOIN project p
  ON s.projectid = p.projectid
WHERE p.id = 110
  AND wp.thedate <= :bis_datum
  AND wp.thedate = (SELECT MAX(thedate)
                    FROM wsprogress
                    WHERE wsid = wp.wsid
                      AND thedate <= :bis_datum)

UNION

SELECT 'bAS typ, wp.wsid, wp.thedate, wp.thevalue,
       s.wsid AS ws_id, p.projectid AS project_id
FROM wsprogress wp
INNER JOIN workstep s
  ON wp.wsid = s.wsid
INNER JOIN project p
  ON s.projectid = p.projectid
WHERE p.id = 110
  AND wp.thedate = (SELECT MAX(thedate)
                    FROM wsprogress
                    WHERE wsid = wp.wsid)
Gruss
Thorsten
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: je ein Eintrag mit dem höchsten Datum (Group By ?)

  Alt 29. Feb 2008, 09:32
Hallo,

so etwa habe ich das dann auch geamcht,
wobei das erste

AND wp.thedate <= :bis_datum

sehr interessant ist, das schränkt ja die äussere Schleife
in der Query ein !! uiui

Ich hatte das bisher nur in der inneren (SubSelect) drin.

Meine prinzipielle Frage war aber,
ob es auch ohne SubSelect geht (und ohne Stored Procedure natürlich).

Oder anderes: Wie designe ich die Tabelle / App, dass ich kein Subselect brauche ?


Heiko
Heiko
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: je ein Eintrag mit dem höchsten Datum (Group By ?)

  Alt 29. Feb 2008, 12:24
Ich würde das so lassen. Ohne SubSelect wird das nicht gehen.
Mit einer Prozedur würde ich bei sowas Einfachem sowieso nie arbeiten.
Ist die Abfrage mit SubSelect denn so langsam?
Deine Datenbankstruktur ist eigentlich soweit ok, wenn deine Performance besser sein muss dann müsstest du anfangen über z.B. Trigger eine zweite Struktur zufüllen. Diese zweite Struktur enthält dann nur noch deine Zusatzinformationen. Aber bedenke, dass dann jeder Schreibzugriff (INSERT, UPDATE, DELETE) langsamer wird. Das ist jetzt die Frage, was ist dir wichtiger ein schnelles Lesen oder Schreiben?
Wie schon gesagt, die Abfrage müsste so eigentlich schnell behandelbar sein und ich würde das so lassen.

Vielleicht bringt da ein Update von FB1.5 auf FB2.x auch Verbesserungen.

Gruss
Thorsten
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: je ein Eintrag mit dem höchsten Datum (Group By ?)

  Alt 29. Feb 2008, 13:41
Hallo,

FB2 -> keine Vorteile

Ich wollte nur wissen, ob es ohne Subselect geht.

Die Abfrage ist schnell genug,
das Problem was ich habe,
es können pro Tag mehrere Einträge existieren
(es gibt noch eine Zeit-Feld TheTime).

in der where vor dem SubSelect kann man aber nicht schreiben TheDate+TheTime
"Expression not allowed"

;(


Heiko
Heiko
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: je ein Eintrag mit dem höchsten Datum (Group By ?)

  Alt 29. Feb 2008, 20:03
Schau dir mal den Datentyp TIMESTAMP an.
Bei dem kann man dann auch Datum+Zeit in der WHERE-Klausel vergleichen ('29.02.2008 12:34:56').

Gruss
Thorsten
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: je ein Eintrag mit dem höchsten Datum (Group By ?)

  Alt 29. Feb 2008, 21:09
Hallo,

schon klar,

ich kann die DB aber nicht ohne weiteres ändern.


Heiko
Heiko
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: je ein Eintrag mit dem höchsten Datum (Group By ?)

  Alt 29. Feb 2008, 21:44
Ok, hier ein neuer Versuch...

SQL-Code:
SELECT 'aAS typ, wp.wsid, wp.thedate, wp.thevalue,
       s.wsid AS ws_id, p.projectid AS project_id
FROM wsprogress wp
INNER JOIN workstep s
  ON wp.wsid = s.wsid
INNER JOIN project p
  ON s.projectid = p.projectid
WHERE p.id = 110
  AND wp.thedate <= :bis_datum
  AND CAST(wp.thedate + wp.thetime AS TIMESTAMP)
      = (SELECT MAX(CAST( thedate + thetime AS TIMESTAMP))
         FROM wsprogress
         WHERE wsid = wp.wsid
           AND thedate <= :bis_datum)

UNION

SELECT 'bAS typ, wp.wsid, wp.thedate, wp.thevalue,
       s.wsid AS ws_id, p.projectid AS project_id
FROM wsprogress wp
INNER JOIN workstep s
  ON wp.wsid = s.wsid
INNER JOIN project p
  ON s.projectid = p.projectid
WHERE p.id = 110
  AND CAST(wp.thedate + wp.thetime AS TIMESTAMP)
      = (SELECT MAX(CAST( thedate + thetime AS TIMESTAMP))
         FROM wsprogress
         WHERE wsid = wp.wsid)
Gruss
Thorsten
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:03 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz