Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [SQL] Zeiträume abfragen (https://www.delphipraxis.net/113702-%5Bsql%5D-zeitraeume-abfragen.html)

quendolineDD 13. Mai 2008 11:02


[SQL] Zeiträume abfragen
 
Hallo Community.

Ich habe eine Tabelle, wo Kundengespräche gespeichert sind.
Die Tabelle hat ein Feld Namens "Datum". Nun möchte ich alle Felder auswählen, in welchen das Datum den letzten 365 Tagen entspricht.
SQL-Code:
select count(gid) from gespraech where kid=1 and Datum=select year(now)-1
Beispielsweise ;)
Mein Problem ist gerade der Bezug auf die Zeitspanne.

Danke im Vorraus

Edit:
Die Tabellenstruktur evtl. noch :)

SQL-Code:
GID | KID | Datum | Startzeit | Endzeit | Rufnummer | Art

Sharky 13. Mai 2008 11:04

Re: [SQL] Zeiträume abfragen
 
Hai guendolineDD,

um welche DB handelt es sich denn?

mkinzler 13. Mai 2008 11:04

Re: [SQL] Zeiträume abfragen
 
Welches DBMS?
SQL-Code:
select count(gid) from gespraech where kid=1 and Datum between now and <Now - 1 Jahr>;

DeddyH 13. Mai 2008 11:06

Re: [SQL] Zeiträume abfragen
 
Ich denke, man käme hier auch ohne BETWEEN aus, da das Datum ja nur größer sein muss als heute - 1 Jahr.

mkinzler 13. Mai 2008 11:12

Re: [SQL] Zeiträume abfragen
 
In diesem besonderen Fall ja.

quendolineDD 13. Mai 2008 11:42

Re: [SQL] Zeiträume abfragen
 
Es handelt sich um MySQL.
SQL-Code:
select count(gid) from gespraech where kid=1 and Datum between now and (Now - 1 year)
#1064 - 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 'year)' at line 1
Kennt das -1 Year / Jahr nicht.

Bzw wenn ich
SQL-Code:
select count(gid) from gespraech where kid=1 and Datum between Now() and (Now - 1)
mache kommt #1054 - Unknown column 'Now' in 'where clause'

Edit:

Habe die Abfrage etwas spezialisiert:
SQL-Code:
select count(gid) from gespraech where gid=1 having Datum>(Now - 1)
Nun kommt #1054 - Unknown column 'Datum' in 'having clause'

mkinzler 13. Mai 2008 11:48

Re: [SQL] Zeiträume abfragen
 
Die <> waren als Platzhalten für die DBMS-Spezifischen Funktionen gedacht
SQL-Code:
DATE_SUB(CURRENT_DATE, INTERVAL 1 YEAR)

Jürgen Thomas 13. Mai 2008 11:53

Re: [SQL] Zeiträume abfragen
 
Ich arbeite nicht mit MySql, aber ein schneller Blick in die Dokumentation führt direkt zum Ziel:

1. Bei Google suchenmysql AND dokumentation

2. Der erste Treffer führt zu MySql Referenzhandbuch

3. Das Inhaltsverzeichnis leitet weiter zu:
Zitat:

Kapitel 12. Funktionen für die Benutzung in SELECT- und WHERE-Klauseln
12.5. Datums- und Zeitfunktionen
4. Gleich das erste Beispiel passt:
Zitat:

Die folgende Abfrage wählt alle Datensätze aus, die einen date_col-Wert haben, der in den letzten 30 Tagen liegt:
SQL-Code:
SELECT something FROM tbl_name
       WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY)

Das Problem liegt darin, dass jedes DBMS seine eigenen Standardfunktionen z.B. für Datum/Zeit hat. MySql kennt also offensichtlich CURDATE() statt NOW() und DATE_SUB für die Datumssubtraktion.

Ist es so schwer, das selbst herauszufinden? Jürgen

mkinzler war schneller, aber vielleicht hilft meine Arbeitsanleitung.

quendolineDD 13. Mai 2008 12:04

Re: [SQL] Zeiträume abfragen
 
Ich hab mich über die falschen Suchbegriffe in die Dokumentation begeben. Aber trotzdem danke für eure Lösungen, es tut nun wie es soll.

quendolineDD 14. Mai 2008 18:33

Re: [SQL] Zeiträume abfragen
 
SQL-Code:
SELECT COUNT(gid) FROM gespraech WHERE DAYOFWEEK(Datum)=(7 OR 1) AND Datum BETWEEN CURRENT_DATE AND DATE_SUB(CURRENT_DATE, INTERVAL 1 MONTH)
count(gid) liefert mir 0 zurück, obwohl es Datensätze gibt, die dem Suchmuster entsprechen.

Komisch ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:35 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz