messiah-net
Goto Top

letzte Woche eines Monats selectieren

Hi

Ich habe eine Tabelle mit eine Datum (leider ein char(17) --> 20080703 14:58:32)

Jetzt möchte ich in einem SELECT * nur die Werte haben die NICHT in der letzten Woche eines Monats sind.

Content-ID: 91232

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

Ausgedruckt am: 22.11.2024 um 10:11 Uhr

Logan000
Logan000 03.07.2008 um 16:24:25 Uhr
Goto Top
Moin
Was genau ist denn die letzte Woche eines Monats?
Die letzen 7 Tage?
Oder die letzte Kalenderwoche des Monats?
Oder die letzte Arbeitswoche?

Gruß L.
Logan000
Logan000 03.07.2008 um 16:38:20 Uhr
Goto Top
Egal hier ein Bsp. für die letzten 7 tage:

SELECT * FROM Tabelle
WHERE cast(datum as Datetime)
Not BETWEEN
cast( '01.'+ cast(Month(cast(datum as Datetime))+1 as varchar(50)) + '.2008 01:01:01' as datetime) -8
AND
cast( '01.'+ cast(Month(cast(datum as Datetime))+1 as varchar(50)) + '.2008 01:01:01' as datetime) -1

(Auf einen SQL 2005 getestet.)
Gruß L.
Messiah-net
Messiah-net 03.07.2008 um 17:02:31 Uhr
Goto Top
HI!
JA genau DAS soll es sein face-wink
Sieht auch ganz gut aus, allerding habe ich ein Problem, folgender Code funktioniert nicht:

SELECT * FROM aaaa
WHERE
(updatedOn NOT IN (SELECT TOP 3 updatedOn FROM aaaa ORDER BY updatedBy, updatedOn DESC))
AND (updatedOn NOT IN (SELECT TOP 1 updatedOn FROM aaaa ORDER BY updatedBy, updatedOn ASC))

AND CAST(updatedOn as DATETIME)
NOT BETWEEN CAST( '01.' + CAST(MONTH(CAST(updatedOn AS DATETIME)) + 1 AS VARCHAR(50)) + '.2008 01:01:01' AS DATETIME) -8
AND CAST( '01.'+ CAST(MONTH(CAST(updatedON AS DATETIME))+1 AS VARCHAR (50)) + '.2008 01:01:01' AS DATETIME) -1

Und des weiteren, ist diese Variante an das Jahr 2008 gebunden!
Logan000
Logan000 04.07.2008 um 08:22:39 Uhr
Goto Top
Moin

Was genau funktioniert nicht.

Und des weiteren, ist diese Variante an das Jahr 2008 gebunden!
Ich wollte den Konvertierungsterror nicht zu weit treiben.

cast(Year(getdate()) as varchar(4)) liefert das akt. Jahr
Messiah-net
Messiah-net 04.07.2008 um 10:28:07 Uhr
Goto Top
Die TOP 3 Funktion funktioniert nicht.

Ich habe mehrere Personen (updatedBy) und will von jedem die letzten 3 Einträge NICHT haben
Logan000
Logan000 04.07.2008 um 11:13:15 Uhr
Goto Top
Natürlich nicht.
Wenn Du mehrere Personen hast und von jedem die letzen 3 Einträge nicht haben möchtest, Kommen ja mehr zusammen wie .
TOP liefert dir aber exakt die ersten 3 Einträge.
Messiah-net
Messiah-net 04.07.2008 um 11:57:28 Uhr
Goto Top
Danke, habe es jetzt folgendermasen gelöst:

SELECT *
FROM Budget AS tempTable1
WHERE updatedOn NOT BETWEEN
DATEADD("d", -7, DATEADD("d", -DAY(CAST(updatedOn as Datetime)), DATEADD("m", 1, CAST(updatedOn AS Datetime))))
AND
DATEADD("d", -DAY(CAST(updatedOn as Datetime)), DATEADD("m", 1, CAST(updatedOn AS Datetime)))
AND
tempTable1.updatedOn NOT IN(
(SELECT TOP 3 updatedOn
FROM Budget AS tempTable2
WHERE tempTable1.updatedby = tempTable2.updatedby ORDER BY updatedOn DESC)
)
;


Jetzt muss ich das nur noch in nen DELETE umwandeln, allerdings auch nicht so einfach, da ich ja temporäre tabellen habe face-sad
Biber
Biber 05.07.2008 um 18:22:55 Uhr
Goto Top
Moin messiah_net,

Jetzt muss ich das nur noch in nen DELETE umwandeln, allerdings auch nicht so einfach, da ich ja temporäre tabellen habe
Wo denn? Ändere doch einfach die zuletzt gepostete Lösung so um, dass Du aus dem allerersten "SELECT *" ein "DELETE" machst.

Vielleicht bist Du ja auch gedanklich schon beim nächsten Problem, aber alle anderen, die hier mitlesen, sind immer noch bei "letzte Woche eines Monats selectieren".
Was macht denn diese Anforderung?
Ist das jetzt erledigt?

Dann können wir etwaige Probleme mit globalen oder userbezogenen temporary tables gerne in einem neuen Thread diskutieren.

Grüße
Biber
Messiah-net
Messiah-net 08.07.2008 um 13:44:49 Uhr
Goto Top
Das Problem hat sich gelöst (auch mit delete)
Allerings hab ich noch ne Zusatzaugabe face-wink

Jett hätte ich gerne die letzten 3 Einträge eines Users an verschiedenen Tagen....


SELECT * FROM Master AS master1 WHERE updatedOn NOT BETWEEN DATEADD("d", -6, DATEADD("d", -DAY(CAST(updatedOn as Datetime)), DATEADD("m", 1, CAST(updatedOn AS Datetime)))) AND DATEADD("d", -DAY(CAST(updatedOn as Datetime))+1, DATEADD("m", 1, CAST(updatedOn AS Datetime))) AND master1.updatedOn NOT IN((SELECT TOP 3 updatedOn FROM JBPMaster AS master2 WHERE master1.updatedBy = master2.updatedBy ORDER BY updatedOn DESC))