AGB  ·  Datenschutz  ·  Impressum  







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

SQL: Liste mit Zeiträumen

Ein Thema von Nersgatt · begonnen am 4. Apr 2017 · letzter Beitrag vom 5. Apr 2017
Antwort Antwort
Benutzerbild von Nersgatt
Nersgatt

Registriert seit: 12. Sep 2008
Ort: Emlichheim
693 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

SQL: Liste mit Zeiträumen

  Alt 4. Apr 2017, 13:31
Datenbank: mySql • Version: 5.6 • Zugriff über: SQL
Moin!

Ich habe eine Tabelle mit Buchungen an bestimmten Tagen und Personen, denen die Buchungen zugeordnet sind.
Personen:
IDName
1Mustermann
2Meier

Buchungen:
IDPersonIDDatum
1104.04.2017
2105.04.2017
3106.04.2017
4204.04.2017
5205.04.2017
6206.04.2017
7108.04.2017
8209.04.2017
9210.04.2017
10211.04.2017

In der Liste können "Löcher" im Datum sein.
Mein Ziel ist es, eine Abfrage zu haben, in der ich eine Liste der Zeiträume zu den Personen bekomme.
Also das Ergebnis sähe aus:
PersonIDNameVonBis
1Mustermann04.04.201706.04.2017
1Mustermann08.04.201708.04.2017
2Meier04.04.201706.04.2017
2Meier09.04.201711.04.2017

Hat jemand eine clevere Idee, wie ich eine solche Abfrage formulieren könnte? Mir fällt so gar kein Ansatz ein.
Jens
  Mit Zitat antworten Zitat
madas

Registriert seit: 9. Aug 2007
207 Beiträge
 
#2

AW: SQL: Liste mit Zeiträumen

  Alt 4. Apr 2017, 13:51
Schon mal mit einer DB-Prozedur versucht?

Geändert von TBx ( 4. Apr 2017 um 14:20 Uhr) Grund: Full Quote entfernt
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#3

AW: SQL: Liste mit Zeiträumen

  Alt 4. Apr 2017, 13:56
Hat jemand eine clevere Idee, wie ich eine solche Abfrage formulieren könnte? Mir fällt so gar kein Ansatz ein.
Das sieht nach einer Window Function SQL aus.
Rank Over Partition by Name
oder sowas

Glaub mySQL kann das aber nicht. Aber wie so oft, gibt es für solche "Lücken" oft komplexere Alternativen (schwerer lesbar und idR langsamer als echte Window Funktionen)

Also frag mal das Netz nach "Rank Over Partition by Alternative mysql". Vielleicht findest Du da schon passende Beispiele mit mySQL "Übersetzung"
Gruß, Jo
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.736 Beiträge
 
Delphi 6 Enterprise
 
#4

AW: SQL: Liste mit Zeiträumen

  Alt 4. Apr 2017, 16:19
Nur mal laut gedacht:

SQL-Code:
Select Basis.*,
  ( Select Min(B2.Datum) From Buchungen B2 Where B2.PersonID=Basis.PersonID
    AND B2.Datum>=Basis.Datum AND B2.Datum+1 not in
   (Select Datum From Buchungen Where PersonID=B2.PersonID)
  ) as Endedatum
From
(
Select
  B.PersonID, P.Name, B.Datum as Startdatum
From
  Buchungen B
Left Join
  Personen P
On P.ID=B.PersonID
Where B.Datum-1 not in (Select Datum From Buchungen Where PersonID=B.PersonID
) Basis

Order By 1,2
Ralph
  Mit Zitat antworten Zitat
madas

Registriert seit: 9. Aug 2007
207 Beiträge
 
#5

AW: SQL: Liste mit Zeiträumen

  Alt 4. Apr 2017, 16:52
Nur mal laut gedacht:

SQL-Code:
Select Basis.*,
  ( Select Min(B2.Datum) From Buchungen B2 Where B2.PersonID=Basis.PersonID
    AND B2.Datum>=Basis.Datum AND B2.Datum+1 not in
   (Select Datum From Buchungen Where PersonID=B2.PersonID)
  ) as Endedatum
From
(
Select
  B.PersonID, P.Name, B.Datum as Startdatum
From
  Buchungen B
Left Join
  Personen P
On P.ID=B.PersonID
Where B.Datum-1 not in (Select Datum From Buchungen Where PersonID=B.PersonID
) Basis

Order By 1,2
Wenn man in der ersten Where Clausel Basis.Datum mit Basis.Startdatum ersetzt, dann funzt das in der Tat.
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.736 Beiträge
 
Delphi 6 Enterprise
 
#6

AW: SQL: Liste mit Zeiträumen

  Alt 4. Apr 2017, 17:14
Ich überlege gerade nochmal, ob man den Subselect fürs Endedatum nicht in die untere Abfrage mit aufnehmen kann, und sich so die äußere Abfrage sparen kann. Aber irgendein Denk(fehler?)/ansatz hatte mich da abgehalten.
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von Nersgatt
Nersgatt

Registriert seit: 12. Sep 2008
Ort: Emlichheim
693 Beiträge
 
Delphi 10.1 Berlin Professional
 
#7

AW: SQL: Liste mit Zeiträumen

  Alt 5. Apr 2017, 07:04
So wie Jumpy es geschrieben hat, hab ich es nun gelöst.
Zum Glück kann ich die Buchungen vorher schon stark einschränken, so dass die Abfrage schnell genug läuft.
Jens
  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 04:27 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