Schrift
[thread]3765[/thread]

Probleme mit GROUP BY

Leser: 2


<< >> 8 Einträge, 1 Seite
format_c
 2007-01-17 11:20
#35101 #35101
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Hi ich hab folgendes Szenario

meine Tabelle dev hat folgenden inhalt
Code: (dl )
1
2
3
4
5
6
7
8
+---------+----------------+
| dev_idx | dev_ip_addr |
+---------+----------------+
| 40 | 192.168.52.252 |
| 709 | 192.168.24.62 |
| 708 | 192.168.24.61 |
| 615 | 192.168.24.60 |
+---------+----------------+


meine Tabelle ping_times folgenden
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
+--------+--------+---------------------+
| dev_id | rtime | ptime |
+--------+--------+---------------------+
| 40 | 10.001 | 0000-00-00 00:00:00 |
| 40 | 10.001 | 2007-01-17 00:00:00 |
| 40 | 10.001 | 0000-00-00 00:00:00 |
| 40 | 10.001 | 2007-01-17 08:56:40 |
| 40 | 4.012 | 2007-01-17 08:58:07 |
| 615 | 5.245 | 2007-01-17 09:30:54 |
| 615 | 10.245 | 2007-01-17 09:34:12 |
+--------+--------+---------------------+


Jetzt möchte ich alle Geräte der Tabelle dev angezeigt bekommen und die jeweils höchsten Zeiteinträge der Tabelle ping_times die die selbe dev_id haben. Ich habe das mit folgendem Kommano versucht
[sql]SELECT
dev.dev_idx,dev.dev_ip_addr,
times.rtime,times.ptime,MAX(times.ptime)
FROM DEV AS dev
LEFT JOIN DEV_PING_TIMES AS times
ON
dev.dev_idx =times.dev_id
GROUP BY
dev.dev_idx
;

[/sql]

Was ich jedoch bekomme ist:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
+---------+----------------+--------+---------------------+---------------------+
| dev_idx | dev_ip_addr | rtime | ptime | MAX(times.ptime) |
+---------+----------------+--------+---------------------+---------------------+
| 40 | 192.168.52.252 | 10.001 | 0000-00-00 00:00:00 | 2007-01-17 08:58:07 |
| 221 | 192.168.24.43 | NULL | NULL | NULL |
| 222 | 192.168.24.2 | NULL | NULL | NULL |
| 223 | 192.168.24.3 | NULL | NULL | NULL |
| 224 | 192.168.24.4 | NULL | NULL | NULL |
| 225 | 192.168.24.5 | NULL | NULL | NULL |
| 227 | 192.168.24.8 | NULL | NULL | NULL |
| 228 | 192.168.24.15 | NULL | NULL | NULL |
| 615 | 192.168.24.60 | 5.245 | 2007-01-17 09:30:54 | 2007-01-17 09:34:12 |
| 708 | 192.168.24.61 | NULL | NULL | NULL |
| 709 | 192.168.24.62 | NULL | NULL | NULL |
+---------+----------------+--------+---------------------+---------------------+


Kann mir jemand helfen?

Gruß Alex
renee
 2007-01-17 11:30
#35102 #35102
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Mach nur ein JOIN (ohne das LEFT).
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/
format_c
 2007-01-17 11:47
#35103 #35103
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Das ist nicht das Problem. Das problem ergibt sich wenn du die die Einträge anschaust wo rtime gesetzt ist. rtime und MAX(rtime) unterscheiden sich. D.H. er gibt mir nicht die rtime des datensatzes mit dem höchsten ptime Wert.

Gruß Alex
renee
 2007-01-17 21:31
#35104 #35104
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Da wirst Du irgendwie mit HAVING arbeiten müssen...
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/
pq
 2007-01-17 22:04
#35105 #35105
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
ich versteh das problem nicht. MAX(ptime) liefert dir das gewuenschte ergebnis.
was im ptime-ergebnis steht, ist wegen des GROUP 'zufällig', aber mit MAX(ptime)
kriegst du ja das, was du willst.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
renee
 2007-01-17 22:07
#35106 #35106
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Aber nicht wenn er die rtime haben will. Wenn ich ihn richtig verstanden habe, dann möchte er die rtime von dem Eintrag mit der höchsten ptime haben.
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/
pq
 2007-01-17 22:15
#35107 #35107
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
aha, die rtime. die ist aber zum zeitpunkt des HAVING schon nicht mehr verfügbar (bzw. 'zufällig' eins der gruppierten ergebnisse)\n\n

<!--EDIT|pq|1169064995-->
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
MartinR
 2007-01-18 07:52
#35108 #35108
User since
2004-06-17
305 Artikel
BenutzerIn
[default_avatar]
Hi,

ich hatte mal die selbe Problemstellung und diese dann in der Art gelöst, dass ich zuerst eine temporäre Tabelle (CREATE TEMPORARY TABLE 'db.tmp_ping_times' ...) anglegt hatte, diese dann mit den MAX-Werten gefüllt und per LEFT JOIN mit der Tabelle dev verknüpft habe.
<< >> 8 Einträge, 1 Seite



View all threads created 2007-01-17 11:20.