AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

GROUP BY nach ORDER BY?

Ein Thema von alcaeus · begonnen am 21. Feb 2009 · letzter Beitrag vom 22. Feb 2009
Antwort Antwort
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#1

GROUP BY nach ORDER BY?

  Alt 21. Feb 2009, 16:08
Datenbank: MySQL • Version: 4.1 • Zugriff über: PHP-Funktionen
Hallo ihr,

fuer eine Abrechnungssoftware muss ich ein Query schreiben, welches die aktuellsten Daten aller Mitarbeiter ausliest. Da es sich um eine Abrechnungssoftware handelt, muss natuerlich die Historie aller Mitarbeiter speichern. Ich habe deshalb zwei Tabellen:
  • employees_employees, welche "normale" Daten, wie z.B. Name, Geburtsdatum, usw. speichert, also alle Informationen, welche man nur einmal eingibt
  • employees_employee_data, welche alle aenderbaren Daten (Bankverbindung, Lohnsteuerklasse, usw.) speichert. Diese Tabelle enthaelt auch ein Feld, welches das Startdatum der Gueltigkeit dieser Daten bestimmt.

Ich benoetige nun ein Query, welches mir die aktuellsten Daten aller Mitarbeiter ausliest. Theoretisch wuerde dies so aussehen:
SQL-Code:
select ee.nickname, eed.* FROM employees_employees ee, employees_employee_data eed WHERE ee.id = eed.emp_id
ORDER BY ee.nickname ASC, eed.start_date DESC
GROUP BY ee.id
Wichtig ist die absteigende Sortierung nach dem Startdatum, da natuerlich der Datensatz mit dem neuesten Datum die aktuellsten Daten enthaelt. Das Problem bei der Sache: GROUP muss vor ORDER kommen, weshalb obige Abfrage auch nicht funktioniert.

Weiss jemand wie ich diese Abfrage so schreiben kann, dass ich die benoetigten Daten mit einem Query rauskriege? Ich koennte den GROUP ja auch weglassen, aber ich wuerde ungern alle Datensaetze auslesen (man stelle sich vor wieviel da zusammenkommt, wenn 200 Mitarbeiter 10 Jahre lang beschaeftigt waren ) und erst bei der Ausgabe die irrelevanten Daten ueberspringen.

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: GROUP BY nach ORDER BY?

  Alt 21. Feb 2009, 16:16
Ungetestet:
SQL-Code:
SELECT ee.nickname, eed.*
FROM employees_employees ee
JOIN employees_employee_data eed ON ee.id = eed.emp_id
WHERE eed.start_date =
  (SELECT MAX(employees_employee_data.start_date)
   FROM employees_employee_data
   WHERE employees_employee_data.emp_id = ee.id)
ORDER BY ee.nickname
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#3

Re: GROUP BY nach ORDER BY?

  Alt 21. Feb 2009, 16:21
Ja, das wars. Ich bin gerade vorhin noch auf die Idee mit Subqueries gekommen und wollte grad nochmal ein Query testen. Ich muss mich erst dran gewoehnen, dass MySQL 4.1 ja auch Subqueries kann

Danke fuer die Hilfe!

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#4

Re: GROUP BY nach ORDER BY?

  Alt 21. Feb 2009, 16:30
Ich würde vermuten, dass es auch ohne Subqueries im Where geht:
SQL-Code:
SELECT ee.nickname, eed.*
FROM employees_employees ee
     JOIN employees_employee_data eed ON (ee.id = eed.emp_id)
     JOIN (SELECT eed2.emp_id AS emp_id, MAX(eed2.start_date) as start_date
           FROM employees_employee_data eed2
           GROUP BY emp_id, start_date) limits ON (ee.id = limits.emp_id AND eed.start_date = limits.start_date)
ORDER BY ee.nickname, eed.start_date
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#5

Re: GROUP BY nach ORDER BY?

  Alt 21. Feb 2009, 16:36
Danke fuer den Tipp, aber das Subquery im WHERE stoert mich nicht - im Gegenteil, es ist sogar schoen erklaerend

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: GROUP BY nach ORDER BY?

  Alt 22. Feb 2009, 09:41
Tipp: Führe in der Tabelle 'employees_employee_data' eine Spalte 'Current = bool' ein. Steht dort ein 'True', handelt es sich um den aktuellen Satz, sonst nicht. Über einen Trigger könntest du sicherstellen, das *nur* der aktuelle Datensatz eines Mitarbeiters hier ein TRUE zu stehen hat.

Dann wäre die von Dir gesuchte Query ganz einfach:
SQL-Code:
SELECT ee.nickname, eed.*
FROM employees_employees ee
     JOIN employees_employee_data eed ON (ee.id = eed.emp_id)
where eed.Current = 'TRUE'     
ORDER BY ee.nickname
Deine Architektur und die damit verbundene Query hat den Nachteil, das Du dir für eine Allerweltsabfrage schon einen abbrechen und den Server unnötig belasten musst.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:01 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