kniffliges Problem... [ERLEDIGT]

Advantage Database Server

Moderator: Moderatoren

Antworten
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

kniffliges Problem... [ERLEDIGT]

Beitrag von UliTs »

Bestimmt gibt es eine ganz einfache SQL-Lösung, ich komme nur nicht drauf...

Ich habe eine Tabelle "Zeitreise" mit den Feldern "Id,Tag,Ort", die aussagen soll, wann man wo war. Beispiel:
  • Id Tag Ort
    1234 01.01.2014 München
    1233 31.12.2013 München
    1232 30.12.2013 Köln
    1231 29.12.2013 Hamburg
    1230 28.12.2013 München
    ...
Ich möchte bestimmen, seit wann ich am aktuellen Ort bin.
In obigem Beispiel soll als Ergebnis der 31.12.2013 rauskommen.

FALSCHE Lösung:

Code: Alles auswählen

SELECT Min(Tag) FROM Zeitreise WHERE ORT='München'
Da kommt (leicht nachvollziehbar) der 28.12.2013 raus.

Kennt jemand eine einfache SQL-Lösung?

Uli
Zuletzt geändert von UliTs am Mi, 25. Jun 2014 12:05, insgesamt 1-mal geändert.
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
nightcrawler
1000 working lines a day
1000 working lines a day
Beiträge: 650
Registriert: Di, 24. Apr 2012 16:33
Wohnort: 72184 Weitingen
Hat sich bedankt: 3 Mal
Danksagung erhalten: 96 Mal
Kontaktdaten:

Re: kniffliges Problem...

Beitrag von nightcrawler »

Aktuellen Ort herausfinden mit:

Code: Alles auswählen

select * from #zeitreise
where ort like (select top 1 ort from #zeitreise order by tag desc);
Den letzten Ort vor dem aktuellen herausfinden herausfinden mit:

Code: Alles auswählen

select top 1 * from #zeitreise
where ort not like (select top 1 ort from #zeitreise order by tag desc)
order by tag desc;
Jetzt erweitern, so dass der nachfolgende Ort davon gefunden wird. Es wird auf >= getestet, da man evtl am gleichen Tag auch mehrere Orte besuchen könnte:

Code: Alles auswählen

select top 1 * from #zeitreise
where ort like (select top 1 ort from #zeitreise order by tag desc)
and tag >= (
  select top 1 tag from #zeitreise
  where ort not like (select top 1 ort from #zeitreise order by tag desc)
  order by tag desc
)
order by tag asc
--
Joachim
Joachim Dürr Softwareengineering
https://www.jd-engineering.de
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: kniffliges Problem...

Beitrag von UliTs »

So, ich habe eine eigene sehr schnelle Lösung gefunden :D .

Code: Alles auswählen

SELECT Min(Tag) 
FROM   Zeitreise 
WHERE  Ort='München' AND 
       Tag >= ( SELECT max(Tag) FROM Zeitreise WHERE Ort<>'München' )
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: kniffliges Problem...

Beitrag von UliTs »

Hallo Joachim,

danke für die Lösung!
Spricht etwas gegen meine Lösung, außer dass ich nicht den aktuellen Ort automatisch bestimme?

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
nightcrawler
1000 working lines a day
1000 working lines a day
Beiträge: 650
Registriert: Di, 24. Apr 2012 16:33
Wohnort: 72184 Weitingen
Hat sich bedankt: 3 Mal
Danksagung erhalten: 96 Mal
Kontaktdaten:

Re: kniffliges Problem... [ERLEDIGT]

Beitrag von nightcrawler »

auf den ersten Blick sehe ich bei Deiner Lösung keine Probleme.
--
Joachim
Joachim Dürr Softwareengineering
https://www.jd-engineering.de
Antworten