Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]3493[/thread]

GROUP BY Timestamp ?: Tag bei Timestamp herausfinden



<< |< 1 2 3 4 >| >> 31 Einträge, 4 Seiten
Froschpopo
 2004-08-05 08:00
#32502 #32502
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Hi,

ich habe eine Logfile welche lauter Datensätze mit jeweilts einem Timestamp enthält.

Nun möchte ich anhand des Timestamps herausbekommen, wieviele Datensätze an einem Tag in das Logfile hinzugekommen sind.

Ich weiß dass es sowas in SQL gibt !!
brauche nur die Where-Klausel !

Vielen Dank!
renee
 2004-08-05 09:09
#32503 #32503
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
[sql]SELECT Timestamp_col, count(Timestamp_col) FROM table GROUP BY Timestamp_col;[/sql]
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Froschpopo
 2004-08-05 09:20
#32504 #32504
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Ne ne Du hast mich falsch verstanden :D
Es geht um eine Datumsabfrage !

Ich will hinterher einen array haben, der so aussieht:

@Count_Datensaetze = (23,2,5);
jedes Element in diesem Array ist die Anzahl der Datensätze, ermittelt durch count(*), pro Tag.
Wir sehen oben also 3 Tage. Ich möchte, dass die Tage jeweils rückwirkend zum heutigen Tag ausgeben werden. Also etwa so: timestamp(today)-$tage
foobar
 2004-08-05 12:29
#32505 #32505
User since
2003-08-04
69 Artikel
BenutzerIn
[default_avatar]
[sql]SELECT datediff( now(), datums_spalte ) AS days_ago,
count( datediff( now(), datums_spalte ) ) AS count_days,
spalte_2
FROM tabelle group by days_ago
[/sql]

Diese Query zählt die Datensätze eines Tages, aller zurückliegenden Tage.
HTH
The three chief virtues of a programmer are: Laziness, Impatience and Hubris
[Larry Wall]
Froschpopo
 2004-08-05 15:52
#32506 #32506
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
ne also tut mir leid, so klappt das nicht.

ich möchte also z.B. wissen, wieviele Einträge gestern und vorgestern getätigt wurden:
Code: (dl )
1
2
3
4
5
6
7
8
my $sth_prepare = $dbh1->prepare("SELECT datediff(now(),datestamp) AS days_ago, count(datediff(now(),datestamp) ) AS count_days FROM userlog group by 2");
$sth_prepare->execute() or die $DBI::errstr;

print "Content-Type: text/html\n\n";

for ($sth_prepare->fetchrow_array()) {
  print $_."\n";
}

warum krieg ich dann:

You have an error in your SQL syntax near '(now(),timestamp) AS days_ago, count(datediff(now(),timestamp) ) AS count_days, ' at line 1 at /usr/local/httpd/cgi-bin/diagramm.pl line 30.

???\n\n

<!--EDIT|Froschpopo|1091706807-->
foobar
 2004-08-05 16:15
#32507 #32507
User since
2003-08-04
69 Artikel
BenutzerIn
[default_avatar]
[QUOTE]
SELECT datediff(now(),datestamp) AS days_ago, count(datediff(now(),datestamp) ) AS count_days FROM userlog group by 2
[/QUOTE}
Das ist auch nicht das was ich gepostet habe. So sollte es funktionieren:
[sql]SELECT datediff(now(),datestamp) AS days_ago, count(datediff(now(),datestamp) ) AS count_days FROM userlog group by days_ago
[/sql]
Wenn du nur die Einträge eines bestimmten tages haben möchtest z.b. heute, dann kannst du das Statement noch um ein HAVING erweitern:
[sql]SELECT datediff(now(),datestamp) AS days_ago, count(datediff(now(),datestamp) ) AS count_days FROM userlog group by days_ago
Having days_ago = 0
[/sql]
The three chief virtues of a programmer are: Laziness, Impatience and Hubris
[Larry Wall]
Froschpopo
 2004-08-05 16:26
#32508 #32508
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Wo lege ich denn fest, wenn ich wissen will, wieviele Einträge gestern gemacht wurden, und wieviele vorgestern?
Das untere Statement gibt wieder ein Error:
Code: (dl )
SELECT datediff(now(),datestamp) AS days_ago, count(datediff(now(),datestamp) ) AS count_days FROM userlog group by days_ago

hier die Fehlermeldung:

You have an error in your SQL syntax near '(now(),timtestamp) AS days_ago, count(datediff(now(),timestamp) ) AS count_days ' at line 1 at /usr/local/httpd/cgi-bin/diagramm.pl line 31.\n\n

<!--EDIT|Froschpopo|1091708845-->
foobar
 2004-08-05 16:54
#32509 #32509
User since
2003-08-04
69 Artikel
BenutzerIn
[default_avatar]
Quote
DATEDIFF(expr,expr2)
DATEDIFF() returns the number of days between the start date expr and the end date expr2. expr and expr2 are date or date-and-time expressions. Only the date parts of the values are used in the calculation.

mysql> SELECT DATEDIFF('1997-12-31 23:59:59','1997-12-30');
-> 1
mysql> SELECT DATEDIFF('1997-11-30 23:59:59','1997-12-31');
-> -31

DATEDIFF() was added in MySQL 4.1.1.

Welche Version von Mysql benutzt du denn? älter als 4.1.1 ? Ich arbeite mit 4.1.3 und da funktioniert es.
The three chief virtues of a programmer are: Laziness, Impatience and Hubris
[Larry Wall]
Froschpopo
 2004-08-05 17:02
#32510 #32510
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
mysql  Ver 11.15 Distrib 3.23.41, for suse-linux (i686)
ich kann mysql so einfach auch nicht updaten da ich über 800.000 Page-Impressions im Monat habe und ein längerer Ausfall fürmich fatale Folgen hätte da ich von dem Server lebe !

Code: (dl )
1
2
mysql> SELECT DATEDIFF('1997-11-30 23:59:59','1997-12-31');
ERROR 1064: You have an error in your SQL syntax near '('1997-11-30 23:59:59','1997-12-31')' at line 1
\n\n

<!--EDIT|Froschpopo|1091711066-->
Froschpopo
 2004-08-05 17:14
#32511 #32511
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
haben wir eine Alternative?
ich hab mal einen Anfang gemacht...
Code: (dl )
SELECT count(*) FROM userlog WHERE TO_DAYS(NOW()) - TO_DAYS(datestamp) <= 30 GROUP BY datestamp

kann das funktionieren?

im Test gibt er mir eine 1 aus, obwohl ich innerhalb von 30 Tagen 2 Einträge (zum Test) geschrieben habe, an jedem Tag einen!
Er müsste also eigentlich 1,1 ausgeben!!\n\n

<!--EDIT|Froschpopo|1091711813-->
<< |< 1 2 3 4 >| >> 31 Einträge, 4 Seiten



View all threads created 2004-08-05 08:00.