Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Abfrage Mietdauer berechnen

Begonnen von Simsalabimel, Juni 11, 2016, 17:31:49

⏪ vorheriges - nächstes ⏩

Simsalabimel

Ich hab einmal die Spalten Miet_Anfang und Miet_Ende und möchte die Mietdauer pro Apartment und Gebäude mir anzeigen lassen.
DateDiff("m",Miet_Anfang,Miet_Ende)
Soweit sogut nur sind 3 Felder bei Miet_Ende ungefüllt. Bei zweien handelt es sich wahrscheinlich noch um aktuelle Mieter und in einer Zeile ist Anfang und Ende nicht gefüllt. Würde das gerne noch weiter in meiner Abfrage möglichst logisch mit einberechnen.

Eine Idee ist das ganze mit IIF und ISNULL und Now() zu kombinieren aber krieg das nicht sauber gebaut.

Simsalabimel

Also Wenn Mietanfang und Mietende gegeben sind soll er mir die differenz also die Mietdauer angeben. Wenn Mietende leer ist soll er bis heuten Datum weiter rechnen. Das ist die Idee dahinter
SELECT IIF(ISNULL(Miet_Ende),Now(),Miet_Ende) das kombiniert mit Monats_Anfang

MzKlMu

Hallo,
was soll berechnet werden wenn der Miet_Anfang leer ist ?
Was willst Du mit Monats_Anfang
Du rechnest die in Deinem DateDiff die Mietdauer in Monaten, ist Dir bewusst, dass da nur ganze Monate gerechnet werden ?

Um ein leeres Miet_Ende abzufangen kannst Du Nz verwenden.
DateDiff("m",Miet_Anfang,Nz(Miet_Ende,Date))
Aber wie gesagt, m = ganze Monate.
Gruß Klaus

Simsalabimel

Danke dir TOP  ;D Mit NZ habe ich gerade eben recherchiert aber kannte ich vorher so nicht. Ja ich rechne mit Monaten da Tage bei Mietdauer weniger Sinn machen würden und die Zahlen auch alle dementsprechend keine Dezimalzahlen raus geben. Monats_Anfang war nur ein Tippfehler.

PS: Bis natürlich auf die 3 aktuellen Mieter mit den leeren Feldern.

MzKlMu

Hallo,
mit Datediff kriegt man nie Dezimalzahlen.
Miete vom 01.06.2016 bis 15.06.2016 ergibt eine Mietdauer von 0 Monaten.
Miete vom 01.05.2016 bis 15.06.2016 ergibt eine Mietdauer von 1 Monat.
Vermietest Du immer nur ganze Monate ?
Gruß Klaus

Simsalabimel

Okay ich muss hier auch nochmal nachhaken und um eine alternativ Lösung bieten. Da ich auch diese Abfrage in Excel als Pivottabelle nutzen möchte kann ich die Funktion Datediff nicht verwenden. Habt ihr noch alternativ vorschläge??

Beaker s.a.

Hallo,
Die direkte Suntraktion von Ende und Anfang ergibt die Differenz in Tagen,
ganz ohne DateDiff.
Durch 30 geteilt ergibt die Monate sogar als Dezimalzahl.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Simsalabimel

Danke durch 30 hab ich auch in erwägung gezogen gehabt. Nur was sind mit den Monaten die 31 haben und der Monat Februar aus ?! Wär das nicht etwas ungenau in der Beziehung?

Simsalabimel

Danke Beaker soweit simpel und gut jedoch versuch ich noch die leeren Felder innerhalb der Felder Ende einzubeziehen. Wenn es leer ist soll er bis heute rechnen. Jetzt kommen wir zur Ausgangs Situation. Bietet sich da nicht IIF Funktion an ?

MzKlMu

Hallo,
If braucht es da nicht, die Nz Funktion hilft.
Zeige bitte die Formel so wie Du diese verwendest.
Gruß Klaus

Simsalabimel

Okay ich habs jetzt hinbekommen
IIF(ISNULL(XY_Ende),Date(),XY_Ende)-XY_Anfang

irgendwas auszusetzen?


MaggieMay

Hi,
Zitat von: Simsalabimel am Juli 13, 2016, 09:27:37
irgendwas auszusetzen?
absolut nicht, die NZ-Funktion wird das wohl ähnlich lösen.
Freundliche Grüße
MaggieMay

ebs17

Zitatirgendwas auszusetzen?

Klar. Wenn schon, dann ...
IIF(XY_Ende Is NULL, Date(), XY_Ende) - XY_Anfang

Eine SQL-Prüfung auf NULL ist mit nativen SQL-Anweisungen in  SQL effizienter. Die VBA-Funktion IsNull wird auch funktionieren, da VBA-Funktionen über den Expression Service in Jet-SQL nutzbar gemacht werden, aber immerhin passiert da Extra-Aufwand.

Die Variante, die ich zeigte, wird auch in Ausführung in Excel-VBA funktionieren (es soll ja vorkommen, dass Datenbankabfragen auch aus Excelmappen vorgenommen werden).
Dort wird die eingelagerte VBA-Funktion IsNull nicht funktionieren, und auch nicht die Access-Funktion Nz.
Mit freundlichem Glück Auf!

Eberhard