Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

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
GELÖST

Die aktuellsten Datensätze mit SELECT erhalten?

Frage Entwicklung Datenbanken

Mitglied: ralfik

ralfik (Level 1) - Jetzt verbinden

07.10.2010 um 20:55 Uhr, 3504 Aufrufe, 4 Kommentare

MS SQL Server 2008

Ich habe eine Tabelle mit über 100.000 Datensätzen. Jeder Datensatz hat eine 8-Stellige ID und von fast jedem Datensatz gibt es mehrere Varianten in der Tabelle. Nun möchte ich bei jeder Abfrage jeweils die aktuellste Version von jedem Datensatz erhalten.

Hier ist mein SELECT:

SELECT *
FROM tb_parts_xl TP
WHERE <irgendwas> AND p_ic_datetime = (SELECT MAX(p_ic_datetime) FROM tb_parts_xl WHERE p_id = TP.p_id)

Leider bekomme ich die Einträge trotzdem mehrfach zurück. Was mache ich falsch?
Mitglied: nxclass
07.10.2010 um 21:02 Uhr
Eine Kombination aus ORDER und GROUP sollte helfen. - Nach meiner Erfahrung wird der erste Datensatz einer Gruppe dann ausgegeben.
01.
SELECT * 
02.
FROM tb_parts_xl 
03.
ORDER BY `p_ic_datetime` 
04.
GROUP BY `p_id`
Bitte warten ..
Mitglied: Biber
07.10.2010 um 21:27 Uhr
Moin nxclass,

Zitat von nxclass:
Eine Kombination aus ORDER und GROUP sollte helfen. -
Nach meiner Erfahrung wird der erste Datensatz einer Gruppe dann ausgegeben.
01.
> SELECT * 
02.
> FROM tb_parts_xl 
03.
> ORDER BY `p_ic_datetime` 
04.
> GROUP BY `p_id` 
05.
> 
Nach meiner Erfahrung hauen einem die gängigen Parser einen aufs Maul bei einem SELECT * FROM.....GROUP BY einFeld..

@ralfik
WTF bedeutet denn:
"Jeder Datensatz hat eine 8-Stellige ID und von fast jedem Datensatz gibt es mehrere Varianten in der Tabelle."

Du vergleichst doch nur auf "ID". OHNE GROUP BY (wo nxclass Recht hat, hat er Recht).
Was soll denn da anderes passieren als "mehrere Sätze"?
01.
SELECT * 
02.
FROM tb_parts_xl TP,  
03.
               (SELECT MAX(ic_datetime) as Max_ts,  id  
04.
                            FROM tb_parts_xl  
05.
                             GROUP BY ID) p 
06.
WHERE <TP-irgendwas =irgendwasKonstantes>  
07.
And p.id = TP.p_id 
08.
AND p.max_ts = TP.IC_Datetime
So sollten jeweils die aktuellsten Datensätzer je ID kommen.


Grüße
Biber
Bitte warten ..
Mitglied: Codehunter
08.10.2010 um 08:22 Uhr
Ich würde sagen das ist kein gutes Datenbankdesign. Wenn es schon versionierte Datensätze in einer Tabelle gibt dann sollte es wenigstens auch ein Feld geben in dem ein Versionszähler hochgezählt wird. Dann ließe sich sowas einfach mit MAX() erledigen.

Verweisen denn die versionierten Datensätze evtl. auf eine andere Tabelle (Verknüpfungsfeld) welches für die versionierten Datensätze eindeutig ist? Wenn ja könntest du ein ORDER BY p_ic_datetime DESC GROUP BY {Verknüpfungsfeld} machen.
Bitte warten ..
Mitglied: ralfik
08.10.2010 um 11:32 Uhr
@nxclass
@Biber

Vielen Dank!
Mit der Lösung von Biber klappt es bestens!
Bitte warten ..
Ähnliche Inhalte
Windows Systemdateien
gelöst Aktuelle Java GUID Liste erhalten (10)

Frage von WinLiCLI zum Thema Windows Systemdateien ...

Batch & Shell
gelöst Powershell select-string -pattern (2)

Frage von LianenSchwinger zum Thema Batch & Shell ...

Visual Studio
Sortierung von DataTable nach Select aufgelöst (1)

Frage von ForgottenRealm zum Thema Visual Studio ...

Neue Wissensbeiträge
Windows Update

Novemberpatches und Nadeldrucker bereiten Kopfschmerzen

(14)

Tipp von MettGurke zum Thema Windows Update ...

Windows 10

Abhilfe für Abstürze von CDPUsersvc auf Win10 1607 und 2016 1607

(7)

Tipp von DerWoWusste zum Thema Windows 10 ...

RedHat, CentOS, Fedora

Fedora 27 ist verfügbar

Information von Frank zum Thema RedHat, CentOS, Fedora ...

Heiß diskutierte Inhalte
Server
Bilder aus dem Web mit CSV runterladen (30)

Frage von Yannosch zum Thema Server ...

Windows Update
WSUS 4 (Server 2012 R2) - Windows 10 Updates nicht möglich (12)

Frage von c0d3.r3d zum Thema Windows Update ...

Windows Userverwaltung
gelöst Administrator hat alle Rechte verloren (10)

Frage von mrdead zum Thema Windows Userverwaltung ...