karlchristian
Goto Top

Problem mit LöschAbfrage.. ältesten Datensatz beibehalten alle anderen löschen

Hallo,

ich habe eine Frage zu einer LöschAbfrage, wo ich nicht genau weis Sie aufzubauen.

Ich habe eine Tabelle mit X Spalten u.a. Ref und Anlagedatum

Der Wert Ref ist x mal vorhanden,
nun möchte ich alle Werte dieser Tabelle löschen bis auf den ältesten Wert
so das nur noch 1x der Wert in der Spalte REF übrig bleibt

Ich drehe mich ein Wenig im Kreis, vielleicht kann mir jemand helfen

Content-ID: 246918

Url: https://administrator.de/contentid/246918

Ausgedruckt am: 22.11.2024 um 16:11 Uhr

killer2012
killer2012 20.08.2014 um 09:32:48 Uhr
Goto Top
moin KarlChristian

beim SQL-Server:

select * from tabelle order by ref desc

letztes Datum ablesen

delete from tabelle
where ref<'datum'

normalerweise '20.08.2014'

cu Rainer
MadMax
MadMax 20.08.2014 um 09:43:50 Uhr
Goto Top
Guten Morgen karlchristian,

dazu zwei Fragen:
1. Gibt es auch eine ID oder sonstwas eindeutiges?
2. Welche Datenbank?

Gruß, Mad Max
karlchristian
karlchristian 20.08.2014 aktualisiert um 09:58:43 Uhr
Goto Top
Hallo Rainer,

danke für den Hinweis,

irgendwie liefert er mit immer noch alle Datensätze

Vielleicht hab ich mich auch missverständlich ausgedrückt.
In der Tabelle habe ich x mal den Wert Ref mit einer Spalte anlagedatum

REF Anlagedatum
1 01.02.2014
1 02.02.2014
1 03.02.2014
1 04.02.2014
2 10.04.2014
2 11.04.2014
2 12.04.2014

nun möchte ich alle Datensätze löschen lassen wo nur noch der älteste Wert übrig bleibt

REF Anlagedatum
1 01.02.2014
2 10.04.2014


Vielleicht verdeutlicht es nun einfacher was ich erreichen möchte
karlchristian
karlchristian 20.08.2014 um 10:05:23 Uhr
Goto Top
Es handelt sich um eine MSSQL im Hintergrund die vorne mit Access bedient wird.
Der Wert Ref ist die ID (doppelte Werte zulässig)
karlchristian
karlchristian 20.08.2014 um 10:22:48 Uhr
Goto Top
Ich habs nun änders gelöst,
min Wert am Datum vorblenden lassen
Das Ergebnis gespeichert
und in der Datenbank einen Primärschlüssel auf den Ref gelegt so das in Zukunft keine doppelten Werte mehr angelegt werden können.
Tabelle geleert
und die bereits "ältesten " Daten nur wieder eingefügt..

Danke aber nochmal..
killer2012
killer2012 20.08.2014 um 10:48:33 Uhr
Goto Top
moin KarlChristian
so wäre es eleganter gewesen

USE deine_tabelle
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
DECLARE @del1 int, @del2 int, @datum date

DECLARE cursor_del1 CURSOR scroll for
select distinct(ref), abfragedatum
from deine_tabelle
order by ref, abfragedatum

OPEN cursor_del1
FETCH NEXT FROM cursor_del1 INTO @del1, @datum
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE cursor_del2 CURSOR scroll for
select ref
from deine_tabelle
where ref=@del1
order by abfragedatum
OPEN cursor_del2
FETCH FIRST FROM cursor_del2 into @del2
FETCH NEXT FROM cursor_del2 into @del2
WHILE @@FETCH_STATUS = 0
BEGIN
delete from deine_tabelle
where current of cursor_del2
FETCH NEXT FROM cursor_del2 INTO @del2
END
CLOSE cursor_del2
DEALLOCATE cursor_del2

FETCH NEXT FROM cursor_del1 INTO @del1, @datum

END

CLOSE cursor_del1
DEALLOCATE cursor_del1

cu Rainer