Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Keine Datensätze in einem Zeitraum MSSQL 2005

Frage Entwicklung Datenbanken

Mitglied: mrunze

mrunze (Level 1) - Jetzt verbinden

30.09.2009 um 14:36 Uhr, 2579 Aufrufe, 6 Kommentare

Hallo,

ich habe 3 Datenbanktabellen, die wie folgt aufgebaut sind:

Adressen Vorgaenge Aktivitaeten
ID ID ID
AdressID VorgangID
AdressID
Name Betreff Betreff
Datum Datum


Mein Problem besteht jetzt darin, dass ich alle Vorgänge bzw. Adressen haben möchte, wozu es in den letzten 7 Tagen keine Aktivität gegeben hat.

Ich bekomme es soweit hin, dass ich die Vorgänge und Aktivitäten angezeigt bekomme wozu es garkeine Aktivität gegeben hat und alle Aktivitäten in der letzten Woche, aber ich stecke jetzt irgendwie fest.

Ich hoffe ich stehe nur aufm Schlauch?!
Mitglied: filippg
30.09.2009 um 17:55 Uhr
Hallo,

Wenn man schon eine halbe Lösung hat ist es oft nicht verkehrt, diese einfach mal zu posten.

mein Ansatz wäre etwas wie
SELECT * FROM Adressen WHERE ID NOT IN (SELECT AdressID FROM Aktivitaeten WHERE Datum > gesternVorEinerWoche)
Also prüfen, wer alles aktuelle Vorgänge hat, und dann alle selektieren, die in dieser Liste nicht enthalten sind.

Knackpunkt ist natürlich "WHERE Datum > gesternVorEinerWoche". gesternVorEinerWoche muss durch einen geeigneten Wert ersetzt werden. Unter MSSQL gibt es dazu glaube ich die DATEDIFF-Funktion. Schau halt mal in der Doku zu Datums/Zeitfunktionen.

Für Syntax übernehme ich grundsätzlich keine Haftung.

Gruß

Filipp
Bitte warten ..
Mitglied: Logan000
01.10.2009 um 08:46 Uhr
Moin moin

Für datums vergleiche eignet sich hier between.
Damit solltes Du alle Aktivitäten erhalten die keinen Eintrag in den letzen 7 tagen haben.
01.
Select * from Aktivitaeten Where Aktivitaeten.datum not between getdate()  and dateadd(d,-7,getdate()) 
Du must halt noch die Vorgäge und Adressen verknüpfen.

Gruß L.
Bitte warten ..
Mitglied: mrunze
01.10.2009 um 14:48 Uhr
Mein bisheriger Ansatz war wie folgt:

01.
SELECT     dbo.Vorgaenge.Betreff AS VorBetreff, dbo.Adressen.Name AS AdrName, dbo.Vorgaenge.ID AS VorID, dbo.Adressen.ID AS AdrID 
02.
FROM         dbo.Vorgaenge INNER JOIN 
03.
                      dbo.Adressen ON dbo.Vorgaenge.AdressID = dbo.Adressen.ID 
04.
WHERE     (dbo.Vorgaenge.ID NOT IN 
05.
                          (SELECT     VorgangID 
06.
                            FROM          dbo.Aktivitaeten AS Aktivitaeten_1))
und

01.
SELECT     dbo.Vorgaenge.Betreff AS VorBetreff, dbo.Adressen.Name AS AdrName, CONVERT(datetime, dbo.Aktivitaeten.Datum, 121) AS Expr1,  
02.
                      dbo.Aktivitaeten.Betreff AS AktBetreff, dbo.Aktivitaeten.Datum AS AktDatum, dbo.Vorgaenge.ID AS VorID, dbo.Adressen.ID AS AdrID, dbo.Aktivitaeten.ID AS AktID 
03.
FROM         dbo.Vorgaenge INNER JOIN 
04.
                      dbo.Adressen ON dbo.Vorgaenge.AdressID = dbo.Adressen.ID INNER JOIN 
05.
                      dbo.Aktivitaeten ON dbo.Vorgaenge.ID = dbo.Aktivitaeten.VorgangID 
06.
WHERE     (NOT (CONVERT(datetime, dbo.Aktivitaeten.Datum, 121) BETWEEN DATEADD(dd, - 7, CONVERT(datetime, GETDATE(), 121)) AND CONVERT(datetime, GETDATE(), 121)))

Vielen Dank für deinen Tipp, ich glaube das wars!
Nur was ist, wenn es zu einem Vorgang garkeine Aktivitäten gibt/gab?
Bitte warten ..
Mitglied: filippg
01.10.2009 um 15:01 Uhr
Nur was ist, wenn es zu einem Vorgang garkeine Aktivitäten
gibt/gab?
Der von mir genannte Ansatz gibt auch diese aus (bzw die Adressen, für Vorgänge kannst du das ja analog ändern). Die von dir geposteten Ansätze tun das nicht. Grund ist das INNER JOIN. Das sorgt dafür, dass nur Zeilen ausgegeben werden, für die ein Join gefunden wird. Ein LEFT JOIN würde das Problem lösen, der nimmt alle Zeilen der ersten Tabelle mit auf. Allerdings kann das dann mit der WHERE-Klausel etwas tricky sein: diese prüft ja auf Werte aus der rechten Tabelle, die dann den Wert NULL haben - und Vergleiche mit NULL können zu unerwarteten Eregebnissen führen.
Ich kann dir http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/index.htm allerwärmstens empfehlen. Hat man schnell mal durchgearbeitet und hat danach wirklich mehr Durchblick.

Gruß

Filipp
Bitte warten ..
Mitglied: Biber
01.10.2009 um 20:41 Uhr
Moin mrunze,

willkommen im Forum.

ich weiss ja nicht, ob du hier schon länger mitliest im Forum - falls nicht:
Hier bekommst du gelegentlich auch Antworten auf Fragen,die du gar nicht gestellt hattest.

Ist aber meistens konstruktiv gemeint, also bitte nicht gleich abtauchen.

a) zu Deinem "..aber ich stecke jetzt irgendwie fest" ...
ja hey! Wenn bei euch typische SQL-Statements nach nur 6 Zeilen so aussehen:
01.
SELECT     dbo.Vorgaenge.Betreff AS VorBetreff, dbo.Adressen.Name AS AdrName, CONVERT(datetime, dbo.Aktivitaeten.Datum, 121) AS Expr1,  
02.
                      dbo.Aktivitaeten.Betreff AS AktBetreff, dbo.Aktivitaeten.Datum AS AktDatum, dbo.Vorgaenge.ID AS VorID, dbo.Adressen.ID AS AdrID, dbo.Aktivitaeten.ID AS AktID 
03.
FROM         dbo.Vorgaenge INNER JOIN 
04.
                      dbo.Adressen ON dbo.Vorgaenge.AdressID = dbo.Adressen.ID INNER JOIN 
05.
                      dbo.Aktivitaeten ON dbo.Vorgaenge.ID = dbo.Aktivitaeten.VorgangID 
06.
WHERE     (NOT (CONVERT(datetime, dbo.Aktivitaeten.Datum, 121) BETWEEN DATEADD(dd, - 7, CONVERT(datetime, GETDATE(), 121)) AND CONVERT(datetime, GETDATE(), 121)))
.... menno, wie willst du das denn lesen/überblicken/warten/optimieren können???

Das sieht doch aus wie auf dem Hof zusammengekehrt.
Kannst Du den Gedanken an dich heranlassen, dass solche Angewohnheiten möglicherweise tatsächlich vorhandene Probleme vorgaukeln?

b) insbesondere auf die Palme bringt mich euer lustigesDatumsfeld... ist bestimmt auch NULLABLE, ungeprüft, aber bei der ersten Anfrage, der ersten interessanten Fragestellung kommt hoch, dass natürlich alle wissen wollen, welche Aktivitäten und Vorgänge denn mit einer Millisekundengenauigkeit (Style 121) denn in den letzten 7 Tagen oder umgerechnet den letzten 7*84000*100 Millisekunden abgegangen sind.

Da ganze dann noch mit einem sau-performanten "WHERE (NOT (convert(bla) BETWENN (dateadd(Convert(blubb) AND Convert(blabb)" ...da geht richtig die Luzie ab.

WozuTF wollt ihr denn nur die Vorgänge und Aktivitäten "Bis heute" haben?
Wie viele sind denn drin, die übernächsten Montag stattgefunden haben??

Wenn das jetzt die ersten Querys mit einem noch nicht In-Entwicklung-befindlichen Datenmodell sind - dann steckt JETZT mehr Aufwand in das Design und nicht jetzt schon in kunstvoll SQL-Verschraubungen.

Grüße
Biber
Bitte warten ..
Mitglied: mrunze
01.10.2009 um 21:17 Uhr
Nein ich tauche nicht ab, ich mag konstruktive Kritik.

Ich nehm dir jetzt auch nicht übel, dass du dich aufregst, du kennst die Hintergründe ja nicht.

Das sogenannte Datenmodell stammt von einer Software mit der ich/wir leider arbeiten müssen. Ich habe ein wenig rumgespiel wie ich am besten an die geforderten Datensätze komme und das ist dabei rausgekommen, ich habe mir selber gedacht, dass das ganze doch auch einfacher/performater zu lösen ist, deshalb habe ich mich hier an dieses Forum gewandt

Schönen Abend noch
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Datenbanken
gelöst MsSQL 2005 zu MsSQL 2014 Servernamen ändern? (21)

Frage von SPSman zum Thema Datenbanken ...

Windows Server
MSSQL 2012 User erstellen mit gewissen Berechtigungen (1)

Frage von rabo001 zum Thema Windows Server ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...

Microsoft Office
Keine Updates für Office 2016 (11)

Frage von Motte990 zum Thema Microsoft Office ...