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)

Frage Entwicklung Datenbanken

Mitglied: K.Danger

K.Danger (Level 1) - Jetzt verbinden

18.02.2010, aktualisiert 11:14 Uhr, 4863 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
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
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
SELECT DISTINCT nur für eines der Felder in der Abfrage?
gelöst Frage von AdminKnechtDatenbanken5 Kommentare

Hallo, da ich nicht der DB-Guru bin und eine Abfrage erstellen muss hänge ich hier: Das Dataset sieht momentan ...

Datenbanken
SQL DISTINCT - jeweils zwei Einträge
Frage von Der-PhilDatenbanken1 Kommentar

Hallo! Ich komme hier gerade bei einem SQL-Projekt nicht weiter. Genutzt wird ein Advantage Database Server: Tabelle: KdNr Artikel ...

Neue Wissensbeiträge
Apple

IOS 11.2.1 stopft HomeKit-Remote-Lücke

Tipp von BassFishFox vor 19 StundenApple

Das Update für iPhone, iPad und Apple TV soll die Fernsteuerung von Smart-Home-Geräten wieder in vollem Umfang ermöglichen. Apple ...

Windows 10

Windows 10 v1709 EN murkst bei den Regionseinstellungen

Tipp von DerWoWusste vor 1 TagWindows 10

Dieser kurze Tipp richtet sich an den kleinen Personenkreis, der Win10 v1709 EN-US frisch installiert und dabei die englische ...

Webbrowser

Kein Ton bei Firefox Quantum über RDP

Tipp von Moddry vor 1 TagWebbrowser

Hallo Kollegen! Hatte das Problem, dass der neue Firefox bei mir auf der Kiste keinen Ton hat, wenn ich ...

Internet

EU-DSGVO: WHOIS soll weniger Informationen liefern

Information von sabines vor 1 TagInternet4 Kommentare

Wegen der europäische Datenschutzgrundverordnung stehen die Prozesse um die Registrierung von Domains auf dem Prüfstand. Sollte die Forderungen umgesetzt ...

Heiß diskutierte Inhalte
Windows Server
RODC kann nicht aus Domäne entfernt werden
Frage von NilsvLehnWindows Server18 Kommentare

HAllo, ich arbeite in einem Universitätsnetzwerk mit 3 Standorten. Die Standorte haben alle ein ESXi Cluster und auf diesen ...

Hardware
Links klick bei Maus funktioniert nicht
gelöst Frage von Pablu23Hardware16 Kommentare

Hallo erstmal. Ich habe ein Problem mit meiner relativ alten maus jedoch denke ich nicht das es an der ...

Netzwerkmanagement
Mehrere Netzwerkadapter in einem PC zu einem Switch zusammenfügen
Frage von prodriveNetzwerkmanagement15 Kommentare

Hallo zusammen Vorweg, ich konnte schon einige IT-Probleme mit Hilfe dieses Forums lösen. Wirklich klasse hier! Doch für das ...

Windows XP
Windows XP Aktivieren geht nicht
Frage von tetikmiroWindows XP13 Kommentare

Hallo Ich habe einen Windows XP mit einen vCenter Converter umgezogen auf eine ESXI. Soweit funktioniert dies auch ohne ...