[gelöst]Datediff Problem

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: [gelöst]Datediff Problem

Re: Datediff Problem

von DeeJay » Fr, 05.09.2008 15:02

juhu das hat geklappt auch wenn sich in deinem code ein kleiner fehler eingeschlichen hat :) da war eine ) zuviel

Code: Alles auswählen

SELECT CASE  WHEN Erwartet THEN DATE_FORMAT(Erwartet, '%d.%m.%Y') ELSE  DATE_FORMAT(DATE_ADD(ReDatum, INTERVAL 20 DAY ), '%d.%m.%Y') END AS Datum
    ,`LfdReNr` , `Matchcode`, If( `Skontobetrag`, `Skontobetrag`, `Nettosumme` ) AS `Summe`
FROM `abf_Rechnungen_offen`
die version tut nun :)

Re: Datediff Problem

von Barlee » Fr, 05.09.2008 14:47

Hallo DeeJay,

das mit dem <OBJECT> ist ein Formatierungsproblem bezogen auf die Datumsformate.
Anstelle von

Code: Alles auswählen

CASE  WHEN `Erwartet`THEN `Erwartet` ELSE DATE_ADD(`ReDatum`,INTERVAL 20 DAY ) END AS Datum
solltest Du probieren:

Code: Alles auswählen

CASE  WHEN Erwartet THEN DATE_FORMAT(Erwartet, '%d.%m.%y') 
ELSE DATE_FORMAT(DATE_ADD(ReDatum,INTERVAL 20 DAY ), '%d.%m.%y')) END AS Datum
Gruß Barlee

Re: Datediff Problem

von DeeJay » Do, 04.09.2008 16:17

so habe nun alle `` gelöscht in der case when schleife. die spalten bleiben wie sie sind
<OBJECT> und der rest wird richtig dargestellt
Dateianhänge
db3.jpg
db3.jpg (101.28 KiB) 1206 mal betrachtet

Re: Datediff Problem

von Barlee » Do, 04.09.2008 16:07

noch ein Nachtrag:

mein Vorschlag mit CASE WHEN bezog sich nur auf das falseValue vom IF. Ich hatte verstanden, dass nicht in jedem Fall das Rechnungsdatum zugrundegelegt werden soll, falls IF = FALSE ist ???

Gruß Barlee

Re: Datediff Problem

von Barlee » Do, 04.09.2008 16:02

Hallo DeeJay,

<OBJECT> kommt normalerweise zurück, wenn man das Ausgangsdatum bei DATE_ADD in Hochkommas setzt. Nimm diese mal bei ReDatum weg und probiere es ohne. Tut sich dann was?

Gruß Barlee

Re: Datediff Problem

von DeeJay » Do, 04.09.2008 15:07

mahlzeit barlee

*verzweifel*

auf der seite war ich gerade um nochmals das if zu studieren, brachte mir aber auch keine punkte

Code: Alles auswählen

SELECT CASE  WHEN `Erwartet`THEN `Erwartet` ELSE DATE_ADD(`ReDatum`,INTERVAL 20 DAY ) END AS Datum
    ,`ReDatum`,`Erwartet`,`LfdReNr` , `Matchcode`, If( `Skontobetrag`, `Skontobetrag`, `Nettosumme` ) AS `Summe`
 FROM `abf_Rechnungen_offen`
dies nun der verzweifelte versuch mit case when .. ich erhalte wieder <OBJECT> als ergebnis

Re: Datediff Problem

von Barlee » Do, 04.09.2008 14:57

Hallo deeJay,
nur muss ja nicht bei allen das Rechnungsdatum genommen werden
dann baue doch eine Fallunterscheidung a la CASE WHEN ein.

http://dev.mysql.com/doc/refman/5.1/de/ ... tions.html

Gruß Barlee

Re: Datediff Problem

von DeeJay » Do, 04.09.2008 14:25

durch datediff wir ja scheinbar nur die differenz an tagen ausgegeben , also eine dezimalzahl
datediff(datum1,datum2) as ergebniss
dann kommt halt z.b. 4 raus
aber ich brauch durch die
IF (datum1,datum1,datum2) als datum
also
wenn (datum1 , true datum1 , false datum2) als neues datum
oder weiter

wenn zahlungseingang war dann stimmt datum 1 wenn dies aber nicht stimmt dann muss datum2 + 20 tage
aus diesem rechnungsdatum was bei neues datum erscheint wird dann notfalls eine mahnstufe von 1-4

somit also nochmal zurück zum anfang
Access SQL Code

Code: Alles auswählen

SELECT IIf([Erwartet],[Erwartet],[ReDatum]+20) AS Datum, Abf_Rechnungen_offen.LfdReNr, Abf_Rechnungen_offen.Matchcode, IIf([Skontobetrag],[Skontobetrag],[Nettosumme]) AS Summe
FROM Abf_Rechnungen_offen;
dort nochmal zu sehen , if erwartet -> true erwartet -> false redatum+20 <- false kann ansich nur dann auftreten wenn der kunde neu ist und das erste mal eine rechnung erhält , die alten haben ja schon durchschnittliche zahlungsziele

Code: Alles auswählen

SELECT If(`Erwartet`,`Erwartet`,`ReDatum`+20) AS `Datum`    ,`ReDatum`,`Erwartet`,`LfdReNr` , `Matchcode`, If( `Skontobetrag`, `Skontobetrag`, `Nettosumme` ) AS `Summe`
 FROM `abf_Rechnungen_offen`


wenn ich in die SELECT DATE_ADD(`ReDatum`, INTERVAL 20 DAY) AS Datum schreibe erhalte ich ein ergebniss in Datumsformat

nur muss ja nicht bei allen das Rechnungsdatum genommen werden

vllt denk ich auch nur zu verquer ich weis es nicht :(

EDIT:

Code: Alles auswählen

SELECT If(`Erwartet`,`Erwartet`,DATE_ADD(`ReDatum`,INTERVAL 20 DAY )) AS `Datum`    ,`ReDatum`,`Erwartet`,`LfdReNr` , `Matchcode`, If( `Skontobetrag`, `Skontobetrag`, `Nettosumme` ) AS `Summe`
 FROM `abf_Rechnungen_offen`
hab das nun nochmals umgestellt
wenn erwartet = erwartet <- true , erwartet false dann DATE_ADD
die felder `ReDatum` und `Erwartet` habe ich nun nur hinzugefügt um zu sehen ob die abfrage wirklich drauf zugreift

Re: Datediff Problem

von Barlee » Do, 04.09.2008 14:15

DeeJay,
aber das mit der datediff im if tut noch nicht so wirklich
bekomme immer noch dezimalzahlen und kein neues datum
Kannst Du hier nicht immer den entsprechenden CodeTEIL einkopieren, auf den sich Deine Frage bezieht? Und dazu vielleicht ein Beispiel der (falschen) Ausgabe bringen.
Falls andere Hilfesuchende/Helfende hier den Thread nachvollziehen wollen, wird es sonst schwierig.

Re: Datediff Problem

von DeeJay » Do, 04.09.2008 13:15

oh habs grad editiert , da fehlte ein AVG in der ZahlungsZiel_2 abfrage
jetzt sind die ergebnisse dort richtig

nun hab ich aber das andere prob noch das ich mit dem erwartet wenn ich den auf Null oder Not Null setz nur dezimalzahlen erhalte

Code: Alles auswählen

SELECT IFNULL(`Erwartet`,`ReDatum`) AS `Datum`    ,`ReDatum`,`Erwartet`,`LfdReNr` , `Matchcode`, If( `Skontobetrag`, `Skontobetrag`, `Nettosumme` ) AS `Summe`
 FROM `abf_Rechnungen_offen`
die variante tut es auch nicht es erscheint immer <Object>

Re: Datediff Problem

von Barlee » Do, 04.09.2008 12:52

Hallo DeeJay,

Code: Alles auswählen

DATE_ADD(`ReDatum`, INTERVAL ZahlZiel DAY) AS `Erwartet`
Experimentier mal mit den Hochkommas bei ReDatum - ändert sich was?

Re: Datediff Problem

von DeeJay » Do, 04.09.2008 11:26

ok also ich hab nun nochmal rücksprache gehalten hier

if erwartet -> ergebnis -> dann ergebnis
wenn erwartet = 0 dann ReDatum + 20
falls ich das richtig verstanden habe , sollte dann was kommen bzw die tabelle weil neukunde noch nie was da , somit kein ergeniss

edit:
muste aber feststellen nach abgleich aller daten das noch irgendwo ein fehler in einer vorherigen abfragen sein muss

SELECT `tbl_Rechnungen`.`ReDatum`, `tbl_Rechnungen`.`LfdReNr`, `tbl_Rechnungen`.`Nettosumme`, `tbl_Rechnungen`.`Bruttosumme`, `Bruttosumme` * 0.97 AS `Skontobetrag`, `tbl_Rechnungen`.`EingangsDatum`, `tbl_Rechnungen`.`EingangsKontoauszug`, `tbl_Rechnungen`.`Mahnstufe`, `tbl_Adressen`.`Matchcode`, DATE_ADD(`ReDatum`, INTERVAL ZahlZiel DAY) AS `Erwartet`, DATEDIFF( CURDATE() , DATE_ADD(ReDatum , INTERVAL 30 DAY)) as Faellig, `tbl_Rechnungen`.`Bemerkung`, `tbl_Adressen`.`LfdAdrNr` FROM `wzdb`.`tbl_Adressen` AS `tbl_Adressen`, `wzdb`.`tbl_Rechnungen` AS `tbl_Rechnungen`, `wzdb`.`Zahlungsziel_2` WHERE `tbl_Adressen`.`LfdAdrNr` = `tbl_Rechnungen`.`LfdAdrNr` AND `Zahlungsziel_2`.`LfdAdrNr` = `tbl_Adressen`.`LfdAdrNr` AND `tbl_Rechnungen`.`EingangsKontoauszug` IS NULL ORDER BY ( `ReDatum` + `ZahlZiel` ) ASC

das funktioniert ansich alles nur komm ich auf ein falsches erwartet datum , meist 7 tage zu früh oder 10 tage zu früh mal wiederrum aber ein tag zu spät
edit:

der obere teil hat sich erledigt , hab nen AVG vergessen , soweit stimmt das nun wieder
aber das mit der datediff im if tut noch nicht so wirklich

bekomme immer noch dezimalzahlen und kein neues datum

Re: Datediff Problem

von Barlee » Mi, 03.09.2008 16:30

Hallo DeeJay,

der Fehler ist immer noch im "IF". Da fehlt ein "falseValue".

Dein SQL jetzt:

Code: Alles auswählen

If(`Erwartet`,DATEDIFF(`Erwartet`,DATE_ADD(`ReDatum`,INTERVAL 20 DAY))) AS Datum 
Das bedeutet: Wenn 'Erwartet' TRUE ist ('Erwartet' <> 0 und 'Erwartet' <> NULL) , wird das Ergebnis von "DATEDIFF(`Erwartet`,DATE_ADD(`ReDatum`,INTERVAL 20 DAY))" zurückgegeben. Was aber soll zurückgegeben werden, wenn 'Erwartet' FALSE ist? Das gibst Du nicht an!

daher mit falseValue:

Code: Alles auswählen

If(`Erwartet`,DATEDIFF(`Erwartet`,DATE_ADD(`ReDatum`,INTERVAL 20 DAY)), [falseValue hier angeben]) AS Datum 
Gruß Barlee

Re: Datediff Problem

von DeeJay » Mi, 03.09.2008 15:21

danke dir nochmals für so schnelle antwort , aufgrund der vorherigen antworten hatte ich das schon so umgestellt , aber dabei ergibt sich auch nur ein fehler

Code: Alles auswählen

SQL-Status: 42000
Fehler-Code: 1064

[MySQL][ODBC 3.51 Driver][mysqld-5.0.60-log]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') AS Datum , `LfdReNr`,`Matchcode`, If( `Skontobetrag`, `Skontobetrag`, `Nettosu' at line 1

Code: Alles auswählen

SELECT If(`Erwartet`,DATEDIFF(`Erwartet`,DATE_ADD(`ReDatum`,INTERVAL 20 DAY))) AS Datum , `LfdReNr`,`Matchcode`, If( `Skontobetrag`, `Skontobetrag`, `Nettosumme` ) AS `Summe`
 FROM `abf_Rechnungen_offen`

Re: Datediff Problem

von Barlee » Mi, 03.09.2008 15:06

Hallo DeeJay,

nur um Dir mal Mut zu machen: Nach weiteren 200 Abfragen hast Du die Datumsabfragen mit Sicherheit drauf ...

Zu Deinem Problem:
"IF" ist folgendermaßen aufgebaut: : IF(expr, trueValue, FalseValue)

Nun schau Dir an, was Du verwendest:

Code: Alles auswählen

If(`Erwartet`,DATEDIFF(`Erwartet`,DATE_ADD(`ReDatum`,INTERVAL 20 DAY))) AS Datum
`Erwartet` = expr
DATEDIFF(`Erwartet`,DATE_ADD(`ReDatum`,INTERVAL 20 DAY)) = trueValue
??? = falseValue >>> überprüfe das einmal

Gruß Barlee

Nach oben