CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren |
08.11.2010, 11:55:24
|
Anfänger
|
|
Registriert seit: Nov 2010
Alter: 41
Beiträge: 2
|
|
den Datensatz mit DeviceID, ValueID und höchster UnixTime
Hallo, bin neu hier und habe ein Problem mit einer Abfrage:
Ich habe eine Tabelle mit folgenden Spalten:
Id, unixtime, id_device, id_messwert, messwert
bedeutet von verschiedenen Messgeräten werden Messwerte in die Tabelle
eingetragen. Nun habe ich den OPC-Server so pgrogrammiert,
dass er nur einen Wert einträgt, wenn er sich zum vorherigen Wert geändert hat.
Sprich die Tabelle könnte nach 7 Datensätzen z.Bsp so aussehen:
id unixtime id_device id_messwert messwert
1 100 7 1 0.2
2 100 7 2 0.3
3 100 7 3 0.4
4 160 7 1 0.5
5 160 7 2 0.6
6 220 7 2 0.7
7 280 7 2 0.8
Nun möchte ich mit einer Abfrage den letzten Datensatz für id_device=7 und id_messwert=1, id_device=7 und id_messwert=2 und id_device=7 und id_messwert=3
sprich (ergebnis):
id unixtime id_device id_messwert messwert
4 160 7 1 0.5
7 280 7 2 0.8
3 100 7 3 0.4
am liebsten auch geordnet nach id_messwert .p
sämtliche distinct, group by, order by kombinationen und joins mit tabelle selbst
habe ich getestet, aber entwerder ich bekomme die ersten anstatt die letzten datensätze oder nicht sortiert oder oder oder.... :/
hoffe einer von euch kann mir iwie weiterhelfen
vielen dank
gruss, phoo
NACHTRAG:
glaube ich habs ^^ allerdings falschrum sortiert, aber das egal, da ich die daten mit php+for-loop ausgeben werde
SELECT * from measurements where id_device=7 GROUP BY id_messwert DESC;
|
08.11.2010, 12:24:33
|
Member
|
|
Registriert seit: Nov 2007
Beiträge: 843
|
|
AW: den Datensatz mit DeviceID, ValueID und höchster UnixTime
Hi
Denke ich nicht denn dein GOUP BY ... DESC wird dich zum Ziel führen
Du brauchst ne Kombination aus JOIN und GROUP
mfg
CKaos
__________________
"Wenn die Leute Häuser so bauen würden, wie wir Programme schreiben, würde der erstbeste Specht unsere Zivilisation zerhacken."
In den allermeisten Fällen sitzt der Bug etwa 40 cm vor dem Monitor!
|
08.11.2010, 13:01:57
|
Junior Member
|
|
Registriert seit: Aug 2010
Alter: 14
Beiträge: 395
|
|
AW: den Datensatz mit DeviceID, ValueID und höchster UnixTime
Mein Vorschlag sieht mal so aus:
Code:
CREATE TABLE measurements (
id INT NOT NULL,
unixtime INT NOT NULL,
id_device INT NOT NULL,
id_messwert INT NOT NULL,
messwert DEC(10,2) NOT NULL,
PRIMARY KEY(id)
);
INSERT INTO measurements VALUES
( 1, 100, 7, 1, 0.2),
( 2, 100, 7, 2, 0.3),
( 3, 100, 7, 3, 0.4),
( 4, 160, 7, 1, 0.5),
( 5, 160, 7, 2, 0.6),
( 6, 220, 7, 2, 0.7),
( 7, 280, 7, 2, 0.8);
SELECT m1.id, m1.unixtime, m1.id_device, m1.id_messwert, m1.messwert
FROM measurements m1
JOIN (SELECT id_device, id_messwert, MAX(unixtime) AS max_unixtime
FROM measurements
GROUP BY id_device, id_messwert
) m2
ON m1.id_device = m2.id_device
AND m1.id_messwert = m2.id_messwert
AND m1.unixtime = m2.max_unixtime
ORDER BY m1.id_messwert;
+----+----------+-----------+-------------+----------+
| id | unixtime | id_device | id_messwert | messwert |
+----+----------+-----------+-------------+----------+
| 4 | 160 | 7 | 1 | 0.50 |
| 7 | 280 | 7 | 2 | 0.80 |
| 3 | 100 | 7 | 3 | 0.40 |
+----+----------+-----------+-------------+----------+
3 rows in set (0.01 sec)
mysql>
Grüße
Thomas
__________________
Die SQL-Backstube
Bietet Rezepte, Lösungen und ausführliche Beispiele rund um gesundes SQL und zufriedene Datenbanken.
|
08.11.2010, 18:16:55
|
Anfänger
|
|
Registriert seit: Nov 2010
Alter: 41
Beiträge: 2
|
|
AW: den Datensatz mit DeviceID, ValueID und höchster UnixTime
thx für die schnellen antworten .p
also ich glaube mit meiner abfrage geht es auch, nur dass es halt in descendant order
ausgegeben wird.
sprich er geht die tabelle von hinten durch, und nimmt jeweils den ersten datensatz den
er findet zu einem bestimmten id_messwert (ist ja dann praktisch der letzte eingetragene)
aber ich muss zugeben, ich hab es nur mit einem referenzwert getestet der
vorher falsch war (vorher der erste eingetragene)
ich werde morgen auf arbeit gleich mal eure abfrage testen ^^
dann ist es auch direkt in ascendent-order .p
thx nochmal
|
08.11.2010, 19:00:49
|
Member
|
|
Registriert seit: Nov 2007
Beiträge: 843
|
|
AW: den Datensatz mit DeviceID, ValueID und höchster UnixTime
Hi
einer von uns beiden ist auf dem Holzweg.
Zitat:
sprich er geht die tabelle von hinten durch
|
versus
DESC bestimmt die Ausgabe nicht die Abarbeitung.
mfg
CKaos
__________________
"Wenn die Leute Häuser so bauen würden, wie wir Programme schreiben, würde der erstbeste Specht unsere Zivilisation zerhacken."
In den allermeisten Fällen sitzt der Bug etwa 40 cm vor dem Monitor!
|
09.11.2010, 11:44:41
|
Member
|
|
Registriert seit: Mar 2006
Alter: 38
Beiträge: 599
|
|
AW: den Datensatz mit DeviceID, ValueID und höchster UnixTime
Was für ein schöner Zufall. Ich bin vorhin im Prinzip auf das gleiche Problem wie Phoo gestoßen. Danke Thomas für deinen Beitrag, dieser hat mich zur Lösung meines Problems gebracht :)
__________________
In der Ruhe liegt die Kraft!
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 22:14:52 Uhr.
|