MS-SQL Group by, aber nur mit jüngerem Datum
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 142973
Url: https://administrator.de/contentid/142973
Ausgedruckt am: 04.12.2024 um 07:12 Uhr
6 Kommentare
Neuester Kommentar
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
Sinngemäß (bei sinnvoll kombinierbaren Sätzen!) wäre das Muster in etwa:
Grüße
Biber
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:
SELECT a.I_nr, a.D_Gueltig_ab, a.DC_Std_Satz from [DB].[dbo].[tabelle] as a,
(SELECT I_nr, Min(D_Gueltig_ab) as min_Gueltig_Ab
From DB].[dbo].[tabelle]
Group By I_Nr) b
Where a.I_nr = b.I_nr
And a.D_gueltig_ab = B. Min_Gueltig_ab
Order by 1
Grüße
Biber