[gelöst]Datediff Problem

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

DeeJay
**
Beiträge: 38
Registriert: Mo, 21.04.2008 09:39
Kontaktdaten:

[gelöst]Datediff Problem

Beitrag 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
Zuletzt geändert von DeeJay am Fr, 05.09.2008 17:11, insgesamt 3-mal geändert.
oOO 2.4.1
Windows 2000 /Kubuntu 8.04
MySQL 5.0.60 (Gentoo Server)
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Datediff Problem

Beitrag 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
DeeJay
**
Beiträge: 38
Registriert: Mo, 21.04.2008 09:39
Kontaktdaten:

Re: Datediff Problem

Beitrag 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
oOO 2.4.1
Windows 2000 /Kubuntu 8.04
MySQL 5.0.60 (Gentoo Server)
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Datediff Problem

Beitrag 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:

Code: Alles auswählen

DATE_ADD(Rechnung, INTERVAL Zahlungsziel DAY)
Gruß Barlee
Zuletzt geändert von Barlee am Mi, 03.09.2008 11:24, insgesamt 1-mal geändert.
DeeJay
**
Beiträge: 38
Registriert: Mo, 21.04.2008 09:39
Kontaktdaten:

Re: Datediff Problem

Beitrag von DeeJay »

,`ReDatum` + DATE_ADD( `ZahlZiel`, INTERVAL 1 DAY) AS Erwartet ,

so kommt keine fehlermeldung aber auch nur ein leeres ergebnis
oOO 2.4.1
Windows 2000 /Kubuntu 8.04
MySQL 5.0.60 (Gentoo Server)
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Datediff Problem

Beitrag von Barlee »

Hast Du

Code: Alles auswählen

DATE_ADD(Rechnung, INTERVAL Zahlungsziel DAY)
(vgl. meinen letzten Beitrag) denn schon probiert?

Gruß Barlee
DeeJay
**
Beiträge: 38
Registriert: Mo, 21.04.2008 09:39
Kontaktdaten:

Re: Datediff Problem

Beitrag 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
oOO 2.4.1
Windows 2000 /Kubuntu 8.04
MySQL 5.0.60 (Gentoo Server)
DeeJay
**
Beiträge: 38
Registriert: Mo, 21.04.2008 09:39
Kontaktdaten:

Re: Datediff Problem

Beitrag 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;
oOO 2.4.1
Windows 2000 /Kubuntu 8.04
MySQL 5.0.60 (Gentoo Server)
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Datediff Problem

Beitrag 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
DeeJay
**
Beiträge: 38
Registriert: Mo, 21.04.2008 09:39
Kontaktdaten:

Re: Datediff Problem

Beitrag 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`
oOO 2.4.1
Windows 2000 /Kubuntu 8.04
MySQL 5.0.60 (Gentoo Server)
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Datediff Problem

Beitrag 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
DeeJay
**
Beiträge: 38
Registriert: Mo, 21.04.2008 09:39
Kontaktdaten:

Re: Datediff Problem

Beitrag 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
Zuletzt geändert von DeeJay am Do, 04.09.2008 13:14, insgesamt 1-mal geändert.
oOO 2.4.1
Windows 2000 /Kubuntu 8.04
MySQL 5.0.60 (Gentoo Server)
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Datediff Problem

Beitrag 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?
DeeJay
**
Beiträge: 38
Registriert: Mo, 21.04.2008 09:39
Kontaktdaten:

Re: Datediff Problem

Beitrag 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>
oOO 2.4.1
Windows 2000 /Kubuntu 8.04
MySQL 5.0.60 (Gentoo Server)
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Datediff Problem

Beitrag 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 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.
Antworten