Top-Themen

Aktuelle Themen (A bis Z)

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, 2599 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 ..
Ähnliche Inhalte
Datenbanken
MSSQL Daten in Zeitraum eingrenzen und addieren
gelöst Frage von nutzloser-userDatenbanken3 Kommentare

Hallo Community, ich habe ein kleines Projekt angenommen und versuche mich derzeit ein bisschen damit zurecht zu finden. Leider ...

Datenbanken
MsSQL 2005 zu MsSQL 2014 Servernamen ändern?
gelöst Frage von SPSmanDatenbanken21 Kommentare

Hallo, ich habe folgendes Problem: ein Kollege von mir ist mit meinem "alten System" mit MSSQL Server 2005 nach ...

Windows Netzwerk
Server nach festgelegtem Zeitraum sperren
gelöst Frage von jale29Windows Netzwerk19 Kommentare

Guten Morgen liebe Community, Die Situation sieht wie folgt aus: Unsere Firma würde gerne Server zu Testzwecken für 2 ...

Visual Studio
MSSQL Server Management Studio 2014: Datensätze direkt editieren bei verknüpften Tabellen
Frage von rupnikVisual Studio1 Kommentar

Ich möchte quick & dirty händisch direkt im MSSQL Server Management Studio in einer bestehenden Datenbank Datensätze editieren. Das ...

Neue Wissensbeiträge
Perl

Perl hat heute Geburtstag: 30 Jahre Perl: Lange Gesichter zum Geburtstag

Information von Penny.Cilin vor 5 StundenPerl2 Kommentare

Hallo, auch wenn es wenige wissen und noch weniger Leute es nutzen. Perl hat heute Geburtstag. 30 Jahre Perl ...

Sicherheit

Blackberry stirbt - Keine Updates für Priv mehr

Tipp von certifiedit.net vor 6 StundenSicherheit

Blackberry wird zu einer 08/15 Firma und geht wohl mehr und mehr den Weg, den HTC schon ging. Von ...

Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 2 TagenWindows 1010 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 2 TagenSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Heiß diskutierte Inhalte
Batch & Shell
Kann man mit einer .txt Datei eine .bat Datei öffnen?
gelöst Frage von HelloWorldBatch & Shell22 Kommentare

Wie schon im Titel beschrieben würde ich gerne durch einfaches klicken auf eine Text oder Word Datei eine Batch ...

Netzwerkgrundlagen
Belibiges Teilnetz einer Subnetzmaske rausfinden?
gelöst Frage von CenuzeNetzwerkgrundlagen18 Kommentare

Wundervollen Gutentag, mittlerweile kann ich Subnetting so einigermaßen, aber ein Problem habe ich noch. Netzwerkadresse und Boradcast errechnen ist ...

LAN, WAN, Wireless
WLAN Reichweite erhöhen mit neuer Antenne
gelöst Frage von gdconsultLAN, WAN, Wireless12 Kommentare

Hallo, ich besitze einen TL-WN722N USB-WLAN Dongle mit einer richtigen Antenne. Ich frage mich jetzt ob man die Reichweite ...

Windows Server
Logging von "gesendeten Nachrichten" auf Terminalservern
gelöst Frage von Z3R0C0MM4N0THiN6Windows Server10 Kommentare

Hallo zusammen, kann mir jemand auf kurzem Wege sagen ob 1) die per Task-Manager (oder damals tsadmin) an Benutzer ...