Forums Neueste Beiträge
 

SELECT Datumsvergleiche

11/09/2009 - 15:51 von Jörg Burzeja | Report spam
Guten Tag,

ich möchte eine Abfrage zur Datenvaliditàt erstellen, habe aber dafür
aber auch nach viel Überlegung noch nicht den richtigen Ansatz gefunden.

Die Daten sehen in etwa so aus:

CREATE TABLE #test (id INT, id_gruppe INT, beginn datetime, ende Datetime)

INSERT INTO #test SELECT 1, 3, '20060801', null

INSERT INTO #test SELECT 7, 5, '20070801', '20070805'
INSERT INTO #test SELECT 4, 5, '20070806', null

INSERT INTO #test SELECT 10, 4, '20070801', null
INSERT INTO #test SELECT 13, 4, '20070806', null

INSERT INTO #test SELECT 18, 8, '20070801','20100505'
INSERT INTO #test SELECT 2, 8, '20070806', ''
INSERT INTO #test SELECT 12, 8, '20080501', null

INSERT INTO #test SELECT 32, 2, '20060801', '20090605'

INSERT INTO #test SELECT 46, 5, '20080801', '20080805'
INSERT INTO #test SELECT 52, 5, '20090506', null


Geprüft werden soll das Datum Ende.
Mindestens ein Satz einer Gruppe muss immer ein Datum ohne Ende haben.
Wird ein neuer Satz für die Gruppe angelegt, wird der bisherige Satz
beendet. Das Datum Ende darf nie nach dem neuen Datum Beginn liegen, und
auch nicht um mehr als 1 Tag abweichen.

Falsch wàren hiernach also:

ID 10 - Endedatum '05.08.2008' fehlt
ID 18 - Endedatum '05.08.2007' wàre richtig
ID 2 - Endedatum '30.04.2008' wàre richtig
ID 32- Endedatum ist nicht leer
ID 46 - Endedatum '05.05.2009' wàre richtig


Danke schon mal.



Viele Grüsse

Jörg
 

Lesen sie die antworten

#1 Christoph Ingenhaag
11/09/2009 - 18:34 | Warnen spam
Hallo Jörg

"Jörg Burzeja" wrote:

...
Geprüft werden soll das Datum Ende.
Mindestens ein Satz einer Gruppe muss immer ein Datum ohne Ende haben.



zB. so

with chk as
(
select
row_number() over (partition by id_gruppe order by ende) pnr
,*
from #test
)
, ld as
(
select
id_gruppe
,max(pnr) max_pnr
,count(ende) count_ende
from chk
group by
id_gruppe
)
select
case
when max_pnr = count_ende then 'Kein offenes Enddatum in der Gruppe'
else ''
end Fehler,
*
from chk
inner join ld
on
chk.id_gruppe = ld.id_gruppe

...
Wird ein neuer Satz für die Gruppe angelegt, wird der bisherige Satz
beendet.


...

Das muss dann ja beim Insert geprüft werden. Schau mal hier
http://www.microsoft.com/communitie...us&p=1

...
Das Datum Ende darf nie nach dem neuen Datum Beginn liegen, und
auch nicht um mehr als 1 Tag abweichen.


...

Was ich hierbei nicht verstehe ist der Zusammenhang zwischen Gruppen und
einzelnen Datensàtzen...

Viele Grüße
Christoph

Ähnliche fragen