myGully.com Boerse.SX
Ungelesen 08.10.16, 15:18   #1
ulmilten
Ist öfter hier
 
Registriert seit: Aug 2014
Beiträge: 277
Bedankt: 281
ulmilten gewöhnt sich langsam dran | 34 Respekt Punkte
Standard MS Access Datenbank bereinigen

Hallo,
ich habe folgende Frage. Ich hab eine große Datenbank, dort sind ganz viele verschiedene ISINs gespeichert. Zu den ISINS werden werden noch Werte gespeichert, mehrmals am Tag. Nun möchte ich eine Abfrage erstellen, dass er mir für jeden Tag, wo die ISIN gespeichert wurde, nur noch den letzten Datensatz zur Verfügung stellt, der Rest soll endgültig GELÖSCHT werden.

So sieht sie exemplarisch für eine ISIN aus. Man muss also irgendwie aus dem TimeStamp erst den Tag ziehen, dann für jeden Tag alles bis auf die letzte Zeit löschen und das für jede ISIN.

Wie sieht die DELETE Anweisung aus? Schon mal vielen Dank.

ulmilten ist offline   Mit Zitat antworten
Ungelesen 08.10.16, 18:02   #2
eitch100
Agnostiker
 
Benutzerbild von eitch100
 
Registriert seit: Dec 2009
Beiträge: 2.510
Bedankt: 1.159
eitch100 putzt sich die Zähne mit Knoblauch. | 2172 Respekt Punkteeitch100 putzt sich die Zähne mit Knoblauch. | 2172 Respekt Punkteeitch100 putzt sich die Zähne mit Knoblauch. | 2172 Respekt Punkteeitch100 putzt sich die Zähne mit Knoblauch. | 2172 Respekt Punkteeitch100 putzt sich die Zähne mit Knoblauch. | 2172 Respekt Punkteeitch100 putzt sich die Zähne mit Knoblauch. | 2172 Respekt Punkteeitch100 putzt sich die Zähne mit Knoblauch. | 2172 Respekt Punkteeitch100 putzt sich die Zähne mit Knoblauch. | 2172 Respekt Punkteeitch100 putzt sich die Zähne mit Knoblauch. | 2172 Respekt Punkteeitch100 putzt sich die Zähne mit Knoblauch. | 2172 Respekt Punkteeitch100 putzt sich die Zähne mit Knoblauch. | 2172 Respekt Punkte
Standard

Zitat:
Zitat von ulmilten Beitrag anzeigen
Man muss also irgendwie aus dem TimeStamp erst den Tag ziehen, dann für jeden Tag alles bis auf die letzte Zeit löschen und das für jede ISIN.
Access ist zwar auch nicht meine Baustelle, aber ich kann dir sagen, dass Access (genau wie Excel) Datum und Uhrzeit als Gleitkommazahl speichert. Also ist der höchste gespeicherte Wert automatisch der letzte Eintrag bzw. das letzte Datum. Vielleicht hilft dir das wenigstens etwas.

Möglicherweise kann man die Spalten absteigend sortieren und alle rechts der ersten löschen. So oder so ähnlich würde ich es in Excel machen. Der Dateityp der TimeStamp-Spalte dürfte natürlich nicht als Text formatiert sein. Aber wie gesagt, Access ist nicht Excel...

Edit: Sorry, hatte dein Bild falsch gelesen, also wenn es überhaupt geht, müsste man natürlich nach Zeilen sortieren...
Müsste eigentlich irgendwie in folgender Art sein:
DELETE FROM (hier kenne ich mich nicht aus ) < MAX(TimeStamp)
__________________
Der Klügere gibt nach... deshalb regieren die Dummen die Welt!
eitch100 ist offline   Mit Zitat antworten
Ungelesen 08.10.16, 20:14   #3
ulmilten
Ist öfter hier
 
Registriert seit: Aug 2014
Beiträge: 277
Bedankt: 281
ulmilten gewöhnt sich langsam dran | 34 Respekt Punkte
Standard

Also die TimestampZeile ist schon als Datum und Zeitfeld so eingespeichert, Access weiß genau, was drin steht. Nur ich muss ihm halt sagen, dass er immer nur für jeden Tag alles außer Max löschen sollen und halt dann zum nächsten Tag beim selben Wertpapier weitergeht...
ulmilten ist offline   Mit Zitat antworten
Ungelesen 09.10.16, 10:09   #4
eitch100
Agnostiker
 
Benutzerbild von eitch100
 
Registriert seit: Dec 2009
Beiträge: 2.510
Bedankt: 1.159
eitch100 putzt sich die Zähne mit Knoblauch. | 2172 Respekt Punkteeitch100 putzt sich die Zähne mit Knoblauch. | 2172 Respekt Punkteeitch100 putzt sich die Zähne mit Knoblauch. | 2172 Respekt Punkteeitch100 putzt sich die Zähne mit Knoblauch. | 2172 Respekt Punkteeitch100 putzt sich die Zähne mit Knoblauch. | 2172 Respekt Punkteeitch100 putzt sich die Zähne mit Knoblauch. | 2172 Respekt Punkteeitch100 putzt sich die Zähne mit Knoblauch. | 2172 Respekt Punkteeitch100 putzt sich die Zähne mit Knoblauch. | 2172 Respekt Punkteeitch100 putzt sich die Zähne mit Knoblauch. | 2172 Respekt Punkteeitch100 putzt sich die Zähne mit Knoblauch. | 2172 Respekt Punkteeitch100 putzt sich die Zähne mit Knoblauch. | 2172 Respekt Punkte
Standard

Aber mit:
DELETE FROM DeinTabellenname WHERE TimeStamp < MAX(TimeStamp)
sollte doch zumindest für die genannte Tabelle funktionieren, oder?
Mit SELECT anstatt DELETE FROM kann man sich die zu löschenden Zeilen erst mal anzeigen lassen.

Aber ich lasse es lieber, bevor ich noch mehr dummes Zeug erzähle.
Wie gesagt, ist nicht nicht meine Baustelle, sorry...
__________________
Der Klügere gibt nach... deshalb regieren die Dummen die Welt!
eitch100 ist offline   Mit Zitat antworten
Ungelesen 09.10.16, 11:22   #5
ulmilten
Ist öfter hier
 
Registriert seit: Aug 2014
Beiträge: 277
Bedankt: 281
ulmilten gewöhnt sich langsam dran | 34 Respekt Punkte
Standard

Naja, besser einer, als keiner^^ Sonst hat ja auch keiner Lust sich der Sache anzunehmen.

Problem ist halt, wenn ich so die Bedingung aufstelle wie du vorschlägst, dann knallt er mir ja viel zu viel weg... Aber ich probiere es Montag nochmal aus, glaube so hatte ich es am Anfang auch mal
ulmilten ist offline   Mit Zitat antworten
Ungelesen 10.10.16, 12:43   #6
eitch100
Agnostiker
 
Benutzerbild von eitch100
 
Registriert seit: Dec 2009
Beiträge: 2.510
Bedankt: 1.159
eitch100 putzt sich die Zähne mit Knoblauch. | 2172 Respekt Punkteeitch100 putzt sich die Zähne mit Knoblauch. | 2172 Respekt Punkteeitch100 putzt sich die Zähne mit Knoblauch. | 2172 Respekt Punkteeitch100 putzt sich die Zähne mit Knoblauch. | 2172 Respekt Punkteeitch100 putzt sich die Zähne mit Knoblauch. | 2172 Respekt Punkteeitch100 putzt sich die Zähne mit Knoblauch. | 2172 Respekt Punkteeitch100 putzt sich die Zähne mit Knoblauch. | 2172 Respekt Punkteeitch100 putzt sich die Zähne mit Knoblauch. | 2172 Respekt Punkteeitch100 putzt sich die Zähne mit Knoblauch. | 2172 Respekt Punkteeitch100 putzt sich die Zähne mit Knoblauch. | 2172 Respekt Punkteeitch100 putzt sich die Zähne mit Knoblauch. | 2172 Respekt Punkte
Standard

Ich habe das mit den Tagen jetzt erst geschnallt. Ich weiß nicht, ob das ohne Unterfunktion oder ohne das Definieren von Variablen geht, aber anscheinend brauchst du noch eine GROUP BY Anweisung, die die Zeilen nach dem Datum aus dem TimeStamp gruppiert. Also irgendwie in dieser Form:

DELETE FROM DeinTabellenname
WHERE TimeStamp < MAX(TimeStamp)
GROUP BY DateValue(TimeStamp)

Aber über die Syntax (besonders bei DateValue(TimeStamp)) bin ich mir sowas von überhaupt nicht sicher...
__________________
Der Klügere gibt nach... deshalb regieren die Dummen die Welt!
eitch100 ist offline   Mit Zitat antworten
Ungelesen 10.10.16, 16:42   #7
ulmilten
Ist öfter hier
 
Registriert seit: Aug 2014
Beiträge: 277
Bedankt: 281
ulmilten gewöhnt sich langsam dran | 34 Respekt Punkte
Standard

Kleines Update:
Habs hinbekommen

Code:

DELETE
FROM
TabelleX AS A
WHERE
EXISTS
(
SELECT
NULL
FROM
TabelleX AS B
WHERE
DateValue(B.Timestamp) = DateValue(A.Timestamp)
AND
B.ISIN = A.ISIN
AND
B.TimeStamp < A. TimeStamp)
ulmilten ist offline   Mit Zitat antworten
Antwort

Themen-Optionen
Ansicht

Forumregeln
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren

BB-Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:22 Uhr.


Sitemap

().