Seite 1 von 2
[gelöst]Datediff Problem
Verfasst: Mi, 03.09.2008 08:32
von DeeJay
Code: Alles auswählen
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`, `ReDatum` + `ZahlZiel` +1 ,datediff( CURDATE() , `ReDatum` +30) AS Faellig, `tbl_Rechnungen`.`Bemerkung`, `tbl_Adressen`.`LfdAdrNr`
FROM `wzdb`.`tbl_Adressen` AS `tbl_Adressen`, `wzdb`.`tbl_Rechnungen` AS `tbl_Rechnungen`, `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
Mit SQL direckt ausführen bekomme ich meldung das Zahlungsziel_2 keine Tabelle ist (stimmt ist eine abfrage)
ohne SQL ausführen bekomme ich dann Syntax error
datediff( CURDATE() , `ReDatum` +30)
da liegt mein eines problem
`ReDatum` + `ZahlZiel` +1
und da mein anderes , es wird zwar berechnet aber egal ob mit oder ohne +1 ergibt das ergebnis zwar etwas was wie ein datum aussieht aber 20080104,73
Re: Datediff Problem
Verfasst: Mi, 03.09.2008 10:34
von Barlee
Hallo DeeJay,
Zahlungsziel_2 keine Tabelle ist (stimmt ist eine abfrage)
Abfragen kannst Du nicht mit ihrem Namen als Tabelle ansprechen, es sei denn, Du hast daraus einen View erstellt. Solltest Du letzteres nicht getan haben, dann hole dies nach. (rechte Maustaste auf die Abfrage >> "Als Ansicht erstellen")
Diesen View kannst Du dann als Tabelle abfragen.
zum zweiten Problem:
Du solltest Dir DATE_ADD anschauen, also z.B.:
Code: Alles auswählen
DATEDIFF( CURDATE() , DATE_ADD(Rechnung, INTERVAL 30 DAY)) as [Bezeichner]
DATE_ADD solltest Du auch hier einbauen
`ReDatum` + `ZahlZiel` +1
Gruß Barlee
Re: Datediff Problem
Verfasst: Mi, 03.09.2008 10:52
von DeeJay
ok muss ich dann aber die andere abfrage Zahlungsziel_1 auch als ansicht erstellen machen? weil ich bekomm ein fehler angezeigt wenn ich dies bei Zahlungsziel_2 versuche
[MySQL][ODBC 3.51 Driver][mysqld-5.0.60-log]
View's SELECT contains a subquery in the FROM clause
EDIT:
also ich muste beide abfragen als tabellen in die mysql senden
das mit dem datediff funktioniert , aber das andere noch nicht ganz
Re: Datediff Problem
Verfasst: Mi, 03.09.2008 11:19
von Barlee
Hallo DeeJay,
Unterabfragen sind in Views nicht erlaubt. Offensichtlich hast Du in Zahlungsziel_2 nach dem FROM noch ein SELECT.
Alternativ kannst Du aus der Unterabfrage ebenfalls einen View erstellen, so dass in Zahlungsziel_2 nach dem FROM dann nur noch der Name des erstellten Views steht.
Anschließend kannst Du nochmal versuchen, aus Zahlungsziel_2 eine Ansicht zu erstellen.
Wenn auch nicht sehr galant, wäre es ein Workaround, den Du versuchen solltest.
EDIT:
das mit dem datediff funktioniert , aber das andere noch nicht ganz
Jetzt mal ins Blaue geschossen:
Gruß Barlee
Re: Datediff Problem
Verfasst: Mi, 03.09.2008 11:23
von DeeJay
,`ReDatum` + DATE_ADD( `ZahlZiel`, INTERVAL 1 DAY) AS Erwartet ,
so kommt keine fehlermeldung aber auch nur ein leeres ergebnis
Re: Datediff Problem
Verfasst: Mi, 03.09.2008 12:47
von Barlee
Hast Du
(vgl. meinen letzten Beitrag) denn schon probiert?
Gruß Barlee
Re: Datediff Problem
Verfasst: Mi, 03.09.2008 12:58
von DeeJay
treffer
wobei dir ergebnisse zwischen der access db und der jetzigen abfragen +/- 2 tage abweichen , aber das kann an der aktualität der daten von der access liegen , die sind halt 2 wochen neuer als das was im mysql drin ist
danke
auch ich werde irgendwann begreifen wie das funktioniert *hoff*
aber ich hab noch rund 200 abfragen vor mir
Re: Datediff Problem
Verfasst: Mi, 03.09.2008 14:31
von DeeJay
SQL aus ACCESS
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;
das mal das umgestellte -> funzt logischerweise mal wieder nicht (langsam fang ich an datumsfunktionen zu hassen)
Code: Alles auswählen
SELECT If(`Erwartet`,DATEDIFF(`Erwartet`,DATE_ADD(`ReDatum`,INTERVAL 20 DAY))) AS Datum, abf_Rechnungen_offen.LfdReNr, abf_Rechnungen_offen.Matchcode, If(`Skontobetrag`,`Skontobetrag`,`Nettosumme`) AS Summe
FROM abf_Rechnungen_offen;
Das funktioniert bis auf den anfang in der IF <OBJECT>
Code: Alles auswählen
SELECT If(`Erwartet`,`Erwartet`,`ReDatum`+20) AS Datum, abf_Rechnungen_offen.LfdReNr, abf_Rechnungen_offen.Matchcode, If(`Skontobetrag`,`Skontobetrag`,`Nettosumme`) AS Summe
FROM abf_Rechnungen_offen;
Re: Datediff Problem
Verfasst: Mi, 03.09.2008 15:06
von Barlee
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
Re: Datediff Problem
Verfasst: Mi, 03.09.2008 15:21
von DeeJay
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
Verfasst: Mi, 03.09.2008 16:30
von Barlee
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
Verfasst: Do, 04.09.2008 11:26
von DeeJay
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
Verfasst: Do, 04.09.2008 12:52
von Barlee
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
Verfasst: Do, 04.09.2008 13:15
von DeeJay
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
Verfasst: Do, 04.09.2008 14:15
von Barlee
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 Code
TEIL 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.