Willkommen |
|
myGully |
|
Links |
|
Forum |
|
|
|
|
08.10.16, 15:18
|
#1
|
Ist öfter hier
Registriert seit: Aug 2014
Beiträge: 253
Bedankt: 285
|
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.
|
|
|
08.10.16, 18:02
|
#2
|
Agnostiker
Registriert seit: Dec 2009
Beiträge: 4.256
Bedankt: 4.523
|
Zitat:
Zitat von ulmilten
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
|
|
|
08.10.16, 20:14
|
#3
|
Ist öfter hier
Registriert seit: Aug 2014
Beiträge: 253
Bedankt: 285
|
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...
|
|
|
09.10.16, 10:09
|
#4
|
Agnostiker
Registriert seit: Dec 2009
Beiträge: 4.256
Bedankt: 4.523
|
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
|
|
|
09.10.16, 11:22
|
#5
|
Ist öfter hier
Registriert seit: Aug 2014
Beiträge: 253
Bedankt: 285
|
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
|
|
|
10.10.16, 12:43
|
#6
|
Agnostiker
Registriert seit: Dec 2009
Beiträge: 4.256
Bedankt: 4.523
|
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
|
|
|
10.10.16, 16:42
|
#7
|
Ist öfter hier
Registriert seit: Aug 2014
Beiträge: 253
Bedankt: 285
|
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)
|
|
|
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
HTML-Code ist Aus.
|
|
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:06 Uhr.
().
|