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

Abfrage Die letzten Einträge einer Tabell anzeigen (Distinct)

Mitglied: K.Danger

K.Danger (Level 1) - Jetzt verbinden

18.02.2010, aktualisiert 11:14 Uhr, 4953 Aufrufe, 1 Kommentar

Ich würde mich über eine Gedächnisstütze zu folgender Problematik freuen:

Das Problem liegt in der korrekten & sinnvollen Formulierung der SQL Abfrage (MS SQL 2008).

Das Scenario:

Benutzer der Datenbank betrachten & bearbeiten eine Hand voll verschiedener Tabellen. z.B. Kunden, Aufträge, Mitarbeiter, ....

Da die Benutzer oft schnell (Anruf) in einen kürzlich bearbeiteten Datensatz springen soll (über eine entsprechende Front End Applikation) möchte ich dem jeweiligen Benutzer anzeigen lassen was er/sie zuletzt geöffnet hatte.

Zu diesem Zweck habe ich eine Tabelle angelegt die in etwas so aussieht:

id int --> Identitätsspezifikation (step 1) & Primärschlüssel
datum smalldatetime
benutzer varchar(50)
dokumenttyp char(1)
dokumentnummer int
zugriffstyp int

das datum soll auf die Minute den Zugriffszeitpunkt abscpeichern
benutzer ist der windows-Anmeldename
dokumenttyp ist z.B. 'k' für Kunde, 'a' für Auftrag usw.
dukumentnummer ist die ID des entsprechenden dokumenttyps
zugriffstyp 0- nur öffnen, 1 - ändern


Ich würde nun gerne eine Liste hieraus erhalten die den letzten Eintrag für einen Benutzer zuerst anzeigt ABER keine Doppelteinträge anzeigt. Also nur den LETZTEN ZUGRIFF auf den Datensatz wiedergibt. Das Datum sollte auch angezeigt werden. (Einträge der letzten 5 Tage)


Ich hatte nach einigem Gebastel eine funktionierende Lösung gefunden ( in diesem Fall soll nur der dokumenttyp Mitarbeiter angezeigt werden - mit einer Tabelle Mitarbeiter verknüpft):


SELECT x.nachname,x.vorname,y.datum,x.manr
FROM tbl_mitarbeiter x
INNER JOIN (SELECT TOP 100 PERCENT a.datum , a.dokumentnummer from base_zugriffe a INNER JOIN (SELECT MAX(id) As id FROM base_zugriffe WHERE benutzer LIKE '%" & Benutzer & "%' Group By dokumentnummer ) b on a.id=b.id where a.datum>'" & Date.Now.AddDays(-5) & "' AND dokumenttyp='m' order by a.datum DESC) y ON x.manr=y.dokumentnummer where x.nachname !='' order by y.datum DESC


jedoch entschleunigt diese den Datenbakzugriff erheblich! Diese Abfrage ist nach viel Trail & Error eroiert worden.... daher wohl unschön.

Ich würde mich über eine viel clevere Alternative freuen!

Vielen Dank im Voraus

Klaas
Mitglied: MadMax
18.02.2010 um 14:23 Uhr
Hallo Klaas,

erst mal vorab:
1. Ich arbeite mit SQL Server 2005, kann also sein, daß da noch was für SQL Server 2008 angepaßt werden müßte oder optimiert werden könnte.
2. Was ich da unten schreibe ist ungetestet, weil ich Deine Tabellen nicht da habe.

So, jetzt zur Abfrage:
Zwei Möglichkeiten fallen mir ein, welche die schnellere ist, müßtest Du ausprobieren. Nach meiner Erfahrung ist die Variante 1 meistens die schnellere, aber nicht immer.

Variante 1:
01.
select	m.nachname,
02.
	m.vorname,
03.
	z1.datum,
04.
	m.manr
05.
from	tbl_mitarbeiter m
06.
	join base_zugriffe z1 on m.manr = z1.dokumentnummer
07.
where	z1.id = (select	top 1 z2.id
08.
		from	base_zugriffe z2
09.
		where	z2.dokumentnummer = z1.dokumentnummer and
10.
			z2.benutzer like '%Benutzer%' and
11.
			z2.datum > dateadd (d, -5, convert (datetime, convert (varchar (50), getdate (), 112), 112)) and
12.
			z2.dokumenttyp = 'm'
13.
		order by z2.datum desc) and
14.
	m.nachname != ''
15.
order by z1.datum desc
Variante 2:
01.
select	m.nachname,
02.
	m.vorname,
03.
	z.datum,
04.
	m.manr
05.
from	tbl_mitarbeiter m
06.
	join (	select	*, row_number () over (partition by benutzer, dokumenttyp, dokumentnummer order by datum desc) sortnr
07.
		from	base_zugriffe
08.
		where	benutzer like '%Benutzer%' and
09.
			datum > dateadd (d, -5, convert (datetime, convert (varchar (50), getdate (), 112), 112)) and
10.
			dokumenttyp = 'm'
11.
		) z on m.manr = z.dokumentnummer and z.sortnr = 1
12.
where	m.nachname != ''
13.
order by z.datum desc
"partition by benutzer, dokumenttyp, dokumentnummer" könnte hier durch "partition by dokumentnummer" ersetzt werden, weil ja auf benutzer und dokumenttyp eingeschränkt wird, aber sobald nach z.B. mehreren Dokumenttypen gesucht wird, braucht man das schon wieder.

Gruß, Mad Max
Bitte warten ..
Ähnliche Inhalte
Datenbanken
Distinct Abfrage aber ohne Distinct
gelöst Frage von Maexx77Datenbanken11 Kommentare

Hallo, ich bekomme mit einer größeren Abfrage aus der Datenbank folgende Daten: Artikel Maschine Material Datum 1AC1.1.2017 2AC1.2.2017 3BD1.1.2017 ...

Datenbanken
SQL-Abfrage - DISTINCT - letztes Datum
gelöst Frage von emeriksDatenbanken3 Kommentare

Hi, ich bauche mal Hilfe bei einer SQL-Abfrage. Habe eine Tabelle mit zwei Spalten: "Farbe" und "Datum" Jede Farbe ...

Datenbanken

Hilfe bei "Distinct" Befehl in Access 2010

gelöst Frage von Dr.CornwallisDatenbanken3 Kommentare

Hallo Gemeinde, ich habe eine Kreuztabelle, in dieser bräuchte ich die Anzahl der Mitarbeiter, diese kommen in der Query ...

Windows Server

DNS Eintrag als dynamischen Eintrag hinterlegen

Frage von clonexWindows Server6 Kommentare

Hallo, ich habe auf dem DC einen DNS Aktiv. Auf diesem wird unsere Domain (ich nenne sie nun meine.de). ...

Neue Wissensbeiträge
Router & Routing
Der "768k-Day" kommt
Information von LordGurke vor 10 StundenRouter & Routing2 Kommentare

Für Leute, die Router mit BGP-Fulltable betreiben vielleicht ein interessanter Hinweis: Die IPv4-Fulltable erreicht voraussichtlich innerhalb der nächsten 2-3 ...

Debian

Partition angeblich voll, dabei aber noch nicht mal zur Hälfte belegt

Anleitung von diemilz vor 12 StundenDebian8 Kommentare

Hallo zusammen, ich habe ein kleines Problem: Ich habe auf einem physischen Debian Linux Server als ZoneMinder-Server (HP ProLiant ...

Windows 7
Updategängelung auf Windows 10, die zweite
Information von Penny.Cilin vor 5 TagenWindows 72 Kommentare

Hallo, da Windows 7 im kommenden Jahr nicht mehr supportet wird, werden Nutzer von Window 7 home premium wieder ...

Internet
EU-Urheberrechtsreform: Zusammenfassung
Information von Frank vor 7 TagenInternet1 Kommentar

Auf golem.de gibt es eine Analyse von Friedhelm Greis, der das Thema EU-Urheberrechtsreform gut und strukturiert zusammenfasst. Zwar haben ...

Heiß diskutierte Inhalte
Backup
Veeam Community Edition
gelöst Frage von dgrebnerBackup21 Kommentare

Hallo Zusammen, kann jemand seine praktischen Erfahrungswerte mit der Veeam-Community Edition mit mir teilen? Es gab dazu ja schon ...

LAN, WAN, Wireless
Notebooks in Firmenwlan authentifizieren
gelöst Frage von EarthShakerLAN, WAN, Wireless17 Kommentare

Guten Tag, unsere Firma möchte gerne flächendeckend WLAN einführen und hat zu diesem Zweck einen Dienstleister beauftragt. Wir benötigen ...

Festplatten, SSD, Raid
Harddisk kaputt, was sagt mir ChrystalDiskInfo
gelöst Frage von InfoSeekerFestplatten, SSD, Raid16 Kommentare

Hallo zusammen, Mein Rechner lahmt. Ich stell mir die Frage woran es liegt und bin der Meinung es ist ...

Netzwerkmanagement
Netzwerk vorübergehend weg
gelöst Frage von ahstaxNetzwerkmanagement13 Kommentare

Hallo, folgendes Szenario stellt sich dar: Im Netzwerk mit Win7-PCs wurden Switche ausgetauscht. Grundsätzlich funktioniert alles mindestens so gut ...