User Tools

Site Tools


sql:tutorials:selectrecordwithmaxdatepergroup

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
sql:tutorials:selectrecordwithmaxdatepergroup [09.02.2017 09:01:47]
yaslaw [Korrelierte Unterabfrage]
sql:tutorials:selectrecordwithmaxdatepergroup [17.10.2019 14:10:04] (current)
yaslaw [Ausgangslage]
Line 7: Line 7:
  
 =====Ausgangslage===== =====Ausgangslage=====
-Als Beispiel nehme ich eine einfache Währungskurs-Tabelle. Sie hat pro Währungs-kombination mehrere Einträge. nun mächte ​ich von jeder Kombination den aktuellsten Eintrag auslesen+Als Beispiel nehme ich eine einfache Währungskurs-Tabelle. Sie hat pro Währungs-kombination mehrere Einträge. nun möchte ​ich von jeder Kombination den aktuellsten Eintrag auslesen
 <​code>​[kurs] <​code>​[kurs]
 w1  | w2  | kurs        | datum w1  | w2  | kurs        | datum
Line 79: Line 79:
 Natürlich kann man das auch mit IN() im WHERE-Bereich erledigen Natürlich kann man das auch mit IN() im WHERE-Bereich erledigen
 <code sql>​SELECT k.* <code sql>​SELECT k.*
-FROM +FROM kurs AS k
-    ​kurs AS k+
 WHERE WHERE
     (k.w1, k.w2, k.datum) IN (     (k.w1, k.w2, k.datum) IN (
Line 107: Line 106:
  
 In MS Access kann man auch mit DMAX() arbeiten. Mit DMAX() das aktuelleste Datum auslesen und im WHERE verknüpfen In MS Access kann man auch mit DMAX() arbeiten. Mit DMAX() das aktuelleste Datum auslesen und im WHERE verknüpfen
-<code sql>​SELECT +<code sql>​SELECT k.* 
-    ​k.* +FROM kurs AS k 
-FROM +WHERE k.datum = DMAX("​datum",​ "​kurs",​ "[w1]='" & k.w1 & "' ​AND [w2]='" & k.w2 & "'"​)
-    ​kurs AS k +
-WHERE +
-    ​k.datum = DMAX("​datum",​ "​kurs",​ "​[w1]="​ & k.w1 & " AND [w2]=" & k.w2)+
 ;</​code>​ ;</​code>​
  
Line 120: Line 116:
 Wir können einfach im inneren Query (Abfragedes aktuellen Datums) noch die Bedinung mit dem Datum hinzufügen. Also Datum der Tabelle ist kleiner oder gleich dem Selektionierten Datum. Wir können einfach im inneren Query (Abfragedes aktuellen Datums) noch die Bedinung mit dem Datum hinzufügen. Also Datum der Tabelle ist kleiner oder gleich dem Selektionierten Datum.
 > Der Datumstring ist je nach DBMS. Oracle: TO_DATE('​19.03.2011',​ '​DD.MM.YYYY'​),​ Access: #​03/​19/​2011#​ > Der Datumstring ist je nach DBMS. Oracle: TO_DATE('​19.03.2011',​ '​DD.MM.YYYY'​),​ Access: #​03/​19/​2011#​
-<code sql>​SELECT ​     w1, +<code sql>​SELECT w1, w2, MAX(datum) AS max_datum 
-            ​w2, +FROM kurs 
-            ​MAX(datum) AS max_datum +WHERE datum <= 2011-03-19 
-FROM        kurs +GROUP BY w1, w2
-WHERE       ​datum <= 2011-03-19 +
-GROUP BY    w1, +
-            ​w2+
 ;</​code>​ ;</​code>​
  
 Oder beim DMAX-Beispiel im Access: Oder beim DMAX-Beispiel im Access:
-<code sql>​WHERE +<code sql>​WHERE k.datum = DMAX("​datum",​ "​kurs",​ "[w1]='" & k.w1 & "' ​AND [w2]='" & k.w2 & "' ​AND [datum] <= #​03/​19/​2011#"​)</​code>​
-    ​k.datum = DMAX("​datum",​ "​kurs",​ "​[w1]="​ & k.w1 & " AND [w2]=" & k.w2 & " AND [datum] <= #​03/​19/​2011#"​)</​code>​+
  
  
sql/tutorials/selectrecordwithmaxdatepergroup.1486627307.txt.gz · Last modified: 09.02.2017 09:01:47 by yaslaw