MySQL Nur die Datensätze zurückgeben, in denen ein anderer Preis steht

f4b1

Mitglied
Hallo zusammen,

ich habe eine Tabelle die aus aus den Spalten Timestamp und Preis besteht. Der Preis ändert sich blos alle paar Stunden, in der Tabelle wird der Preis allerdings jede Minute gespeichert.

Ich möchte nun ein MySQL-Query haben, das mir blos die Zeilen zurückgibt, bei denen sich der Preis geändert hat.

Beispiel:

timestamp | preis
--------------------------
0 | 5
60 | 10
120 | 10
180 | 10
240 | 15
300 | 15
360 | 15
420 | 20
480 | 15
...

Ich hätte nun also gerne als Ergebnis des My-SQL-Query die Zeilen mit dem Inhalt: "0 | 5", "60 | 10", "240 | 15", "420 | 20" und "480 | 15".

Die Tabelle besteht aus weit über 10.000 Datensätze. Da das Ergebnis an ein Android-Phone übertragen werden soll, gilt es natürlich so wenig Daten wie möglich zu übertragen. Deshalb wäre es ja schwachsinnig, zig Datensätze zu übertragen, die jeweils denselben Preis haben.

Danke für Eure Hilfe!

Viele Grüße.
 

eRaaaa

Top Contributor
in der Tabelle wird der Preis allerdings jede Minute gespeichert.

Kannst du darauf Einfluss nehmen? Und werden diese Einträge an einer anderer Stelle gebraucht?
Weil wenn nicht, wäre die Frage wieso diese dann überhaupt abgelegt werden?Man kann ja vorher schauen ob der Wert vom letzten Eintrag gleich ist...Ansonsten kann man sich auch überlegen eine neue Relation zu erstellen wo du dann nur die Zeiten ablegst wo eine Veränderung stattgefunden hat und eben dann über den Schlüssel auf die andere referenzierst ?!

Eine Abfrage in der Form wie du jetzt hast, fiele mir spontan auch nicht ein :oops:
 
S

SlaterB

Gast
Code:
select * from test t1, test t2
where t1.b != t2.b and t1.a < t2.a
  and 0 = (select count(*) from test t3 where t3.a > t1.a and t3.a < t2.a)  [1]
order by t1.a
b = preis, a = zeit

Preis muss sich unterscheiden, Zeit ist zeitlich geordnet,
[1] gesucht sind nur benachbarte Einträge, bei durchgehender Id wäre das mit +1 einfacher,
so eben auf diese Weise testen, es darf keine Einträge dazwischen geben

edit: Timestamp-Abstand 60 bzw. unter 100 kann man auch nehmen, scheint ja konstant zu sein?
 
Zuletzt bearbeitet von einem Moderator:

f4b1

Mitglied
Jo genau, der Abstand ist 60 Sekunden.

Ich werds mal testen und dann posten obs geklappt hat, danke!


Code:
select * from test t1, test t2
where t1.b != t2.b and t1.a < t2.a
  and 0 = (select count(*) from test t3 where t3.a > t1.a and t3.a < t2.a)  [1]
order by t1.a
b = preis, a = zeit

Preis muss sich unterscheiden, Zeit ist zeitlich geordnet,
[1] gesucht sind nur benachbarte Einträge, bei durchgehender Id wäre das mit +1 einfacher,
so eben auf diese Weise testen, es darf keine Einträge dazwischen geben

edit: Timestamp-Abstand 60 bzw. unter 100 kann man auch nehmen, scheint ja konstant zu sein?


Mhh, die Abfrage läuft nun seit 10 Minuten und hat noch kein Ergebnis geliefert.. :/
Die Tabelle hat knapp 130.000 Einträge, daran wirds wohl liegen
 
Zuletzt bearbeitet:

r.w.

Bekanntes Mitglied
Hallo zusammen,

wenn der Zeitabstand konstant 60 Sekunden ist,
hätte ich diese Lösung anzubieten:

Code:
SELECT t1.timestamp, t1.preis 
FROM test t1
WHERE NOT t1.preis IN
 (
  SELECT t2.preis 
  FROM test t2 
  WHERE t2.timestamp = t1.timestamp-60 
 )

Sollte das noch zu langsam sein, könnte man
noch einen Index auf die Spalte "timestamp" legen.

VG ROlf
 
Zuletzt bearbeitet:

f4b1

Mitglied
Hallo zusammen,

wenn der Zeitabstand konstant 60 Sekunden ist,
hätte ich diese Lösung anzubieten:

Code:
SELECT t1.timestamp, t1.preis 
FROM test t1
WHERE NOT t1.preis IN
 (
  SELECT t2.preis 
  FROM test t2 
  WHERE t2.timestamp = t1.timestamp-60 
 )

Sollte das noch zu langsam sein, könnte man
noch einen Index auf die Spalte "timestamp" legen.

VG ROlf

Bäm! Klasse, innerhalb von ner halben Sekunde war das Ergebnis da!

Super Sach! Dank Dir! :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Datensätze in DataGrip (IntelliJ) Datenbankprogrammierung 1
nonickatall MySQL Auf neue Datensätze in einer Datenbank reagieren Datenbankprogrammierung 5
J Java fügt Datensätze ein aber diese werden nicht richtig abgefragt Datenbankprogrammierung 3
R MySQL Datensätze in Textdokument Datenbankprogrammierung 7
F MySQL Wie kann ich in Java Datensätze aus einer MySQL Datenbank gezielt in einzelne Arrays schreiben? Datenbankprogrammierung 9
R Große Datensätze, kleine Rechte Datenbankprogrammierung 8
J wie mit resultset.next() über Datensätze iterieren? Datenbankprogrammierung 15
T MySQL MySQL - Insert into fügt zwei identische Datensätze ein Datenbankprogrammierung 2
B Nur 99% der Datensätze werden in Tabelle geschrieben Datenbankprogrammierung 2
E primaryKey auslesen - Datensätze abgleichen Datenbankprogrammierung 4
S Häufig vorkommende Datensätze Datenbankprogrammierung 4
Kandum MySQL Anzahl gefundener Datensätze bleibt gleich, auch wenn mehr existieren und ausgegeben werden Datenbankprogrammierung 3
P Mit Hibernate mehrere Datensätze löschen Datenbankprogrammierung 7
J Datensätze löschen Datenbankprogrammierung 6
O Löschen vieler Datensätze mit Hibernate Datenbankprogrammierung 11
C Hibernate Datensätze finden Datenbankprogrammierung 17
F [SQLite] Mehrere Datensätze einfügen Datenbankprogrammierung 12
S Anzahl Datensätze in db4o Datenbankprogrammierung 2
D Können nur angesehende Datensätze geloggt werden? Datenbankprogrammierung 4
F NUR 3 datensätze auslesen Datenbankprogrammierung 6
B Aktuellen Stand der Datensätze einer Datenbank anzeigen Datenbankprogrammierung 9
J SQL-Abfrage zur löschung doppelter Datensätze Datenbankprogrammierung 7
J Ausgewählte Datensätze in DB-Tabelle schreiben Datenbankprogrammierung 13
J Datensätze aus der Datenbank holen Datenbankprogrammierung 3
S MySQl - Neue Datensätze "on the Fly" verarbeiten Datenbankprogrammierung 8
M Keine doppelten Datensätze einfügen Datenbankprogrammierung 24
N Oracle DB liefert nicht alle Datensätze Datenbankprogrammierung 3
C Doppelte Datensätze Datenbankprogrammierung 11
T Datensätze effektiv einlesen Datenbankprogrammierung 4
ARadauer viele datensätze. Datenbankprogrammierung 3
I Anzahl unterschiedlicher Datensätze ausgeben Datenbankprogrammierung 2
D mehrere Datensätze in ein Listenfeld Datenbankprogrammierung 2
S 50.000 updates auf 50.000 Datensätze Datenbankprogrammierung 3
A SELECT-Anweisung liefert keine Datensätze zurück Datenbankprogrammierung 9
M Datensätze zählen. Datenbankprogrammierung 6
E SQL-Frage (Löschen aller Datensätze) Datenbankprogrammierung 9
M JDBC: Viele Datensätze in Tabelle einfügen: Wie? Datenbankprogrammierung 7
C Datensätze variabel hinzufügen Datenbankprogrammierung 4
K Ältere Datensätze archivieren Datenbankprogrammierung 4
C Datensätze in einer JComboBox auflisten Datenbankprogrammierung 2
V Anzahl der Datensätze abfragen Datenbankprogrammierung 9
W Datensätze v. SQL-Datenbank i. JTextFields ausgeben/updaten Datenbankprogrammierung 12
D Anzahl der zurückgelieferten Datensätze Datenbankprogrammierung 2
S Hibernate: Verschiedene Klassen zurückgeben. Datenbankprogrammierung 2
B MySQL Datenbank Connection als String zurückgeben Datenbankprogrammierung 7
T MySQL ResultSet zurückgeben nachdem Connection geschlossen wurde? Datenbankprogrammierung 3
Airwolf89 Spaltennamen einer Tabelle zurückgeben lassen Datenbankprogrammierung 9
C Erzeugten Schlüssel zurückgeben lassen (Hibernate) Datenbankprogrammierung 5
G Unsortiert zurückgeben? Datenbankprogrammierung 8
L Objekt in die DB speichern und die Id zurückgeben Datenbankprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben