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

MS-SQL Group by, aber nur mit jüngerem Datum

Frage Entwicklung Datenbanken

Mitglied: Meierjo

Meierjo (Level 2) - Jetzt verbinden

17.05.2010 um 15:59 Uhr, 5552 Aufrufe, 6 Kommentare

Hallo

Ich bin mit dem Einstieg in SQL-Statements beschäftigt, bin also noch neu in diesem Gebiet

Folgende Tabelle existiert:

I_nr D_gueltiG_Ab DC_kalk_STD_Satz
----------------------- ---------------------------------------
1 2007-06-01 00:00:00.000 100.00
2 2007-06-01 00:00:00.000 120.00
2 2008-10-01 00:00:00.000 130.00
3 2007-06-01 00:00:00.000 120.00
3 2008-10-01 00:00:00.000 130.00
4 2007-06-01 00:00:00.000 60.00
4 2008-10-01 00:00:00.000 70.00
5 2007-06-01 00:00:00.000 60.00
5 2008-10-01 00:00:00.000 70.00
6 2007-07-03 00:00:00.000 60.00
6 2008-10-01 00:00:00.000 70.00
7 2007-06-01 00:00:00.000 130.00
7 2008-10-01 00:00:00.000 140.00
8 2007-06-01 00:00:00.000 60.00
8 2008-10-01 00:00:00.000 70.00
9 2007-06-01 00:00:00.000 130.00
9 2008-10-01 00:00:00.000 140.00
10 2007-06-01 00:00:00.000 60.00
10 2008-10-01 00:00:00.000 70.00
11 2007-06-01 00:00:00.000 130.00
11 2008-10-01 00:00:00.000 140.00
12 2007-06-01 00:00:00.000 60.00
12 2008-10-01 00:00:00.000 70.00

wie ihe sehen könnt, existiert die I_nr teilweise mehrfach (fragt nicht warum, ich habe die Tabelle nicht erstellt)

Ich möchte nun mit einem Statement pro I_Nr eine Zeile erhalten. So weit kein Problem, liesse sich per select distinct oder Group by umsetzen.

Ich möchte aber dort, wo die selbe I-Nr mehrmals vorkommt nur die Zeile mit dem jüngeren Datum erhalten.

Ist für euch Programmierprofis wohl ein Klacks, aber mir steht da irgendwie einer auf dem Schlauch

Gruss Meierjo
Mitglied: godlie
17.05.2010 um 16:18 Uhr
Hallo,
einfach ein Order by Datum Desc und Limit 1 damit erhälst den jüngsten Eintrag afaik.
Bitte warten ..
Mitglied: Meierjo
17.05.2010 um 16:49 Uhr
Hallo Godlie

Besten Dank für die prompte Antwort.

Der Befehl oder die Option Limit scheint aber aus MySql zu stammen, und kann in MSSQL nicht verendet werden.

Gruss Meierjo
Bitte warten ..
Mitglied: it-frosch
17.05.2010 um 17:24 Uhr
Hallo Meierjo,

select [D_gueltiG_Ab],[I_nr], [DC_kalk_STD_Satz] from [DB].[dbo].[tabelle]
order by [D_gueltiG_Ab] desc


MSSQL hat übrigends auch eine Hilfe.
Bitte warten ..
Mitglied: Meierjo
17.05.2010 um 19:56 Uhr
Hallo IT-Frosch

Danke für die Rückmeldung

Mit deinem Statement bekomme ich aber alle I_nr ausgewiesen.
Ich möchte aber dort , wo mehrere Einträge pro I_nr stehen (ZB I_nr 02, 03 oder 04) nur den Datensatz mit dem jüngeren Datum (ZB 2008-10-01 00:00:00.000 ) erhalten

Gruss und schönen Abend
Bitte warten ..
Mitglied: Biber
17.05.2010 um 20:38 Uhr
Moin Meierjo,

dann musst du die Tabelle zweimal im Select haben , einmal satzweise und einmal els SubSelect mit GROUP BY [I_nr] und über den MIN()-Wert von [D_gueltig_ab] verjoinen.
Ist aber alles gequirte...s Suboptimum, weil
  • keiner von uns den Primaray Key, das allein identifizierende Merkmal eines Satzes kennt
  • weil es logisch nicht sein kann, dass mehrere Sätze mit der ID x (z.B. 7) beide "gueltig_ab" irgendwann sind und beide immer noch "gueltig_bis" zur Schalke-Meisterschaftsfeier sein werden
  • weil diese Liste nach deinen Vorgaben generiert dementsprechend vollkommen willkürlich irgendwelche Stundensätze aus diesem und aus vergangenen Jahren in einen Kontext bringt, der absoluter Quark ist.

Sinngemäß (bei sinnvoll kombinierbaren Sätzen!) wäre das Muster in etwa:
01.
SELECT a.I_nr, a.D_Gueltig_ab, a.DC_Std_Satz from [DB].[dbo].[tabelle] as a, 
02.
        (SELECT  I_nr, Min(D_Gueltig_ab) as min_Gueltig_Ab   
03.
                From DB].[dbo].[tabelle]  
04.
                    Group By I_Nr) b 
05.
Where a.I_nr = b.I_nr 
06.
And a.D_gueltig_ab = B. Min_Gueltig_ab 
07.
Order by 1
Grüße
Biber
Bitte warten ..
Mitglied: Meierjo
18.05.2010 um 06:54 Uhr
Hallo Biber

Dnke dir, deine Lösung funktioniert.

>>weil es logisch nicht sein kann, dass mehrere Sätze mit der ID x (z.B. 7) beide "gueltig_ab" irgendwann sind und beide immer noch "gueltig_bis" zur Schalke-Meisterschaftsfeier sein werden
Darüber hab ich mich auch schon gewundert, dachte mir aber, der Profi, der die Datenbank erstellt hat, wird sich schon was gedacht haben. Aber wie gesagt, die Tabelle ist nicht von mir, ich beschäftige mich nur damit, Daten aus dieser Tabelle zu lesen.

Danke dir herzlich für deine Hilfe.

Gruss Meiero
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Datenbanken
gelöst SQL-Abfrage - DISTINCT - letztes Datum (3)

Frage von emeriks zum Thema Datenbanken ...

Datenbanken
MS-SQL-Server + T-SQL+Batch (4)

Frage von kallewirsch zum Thema Datenbanken ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...