Zum Inhalt wechseln


Foto

einfache Abfrage ?


  • Bitte melde dich an um zu Antworten
4 Antworten in diesem Thema

#1 Christoph-MG

Christoph-MG

    Newbie

  • 3 Beiträge

 

Geschrieben 06. April 2016 - 09:18

Hallo Zusammen,
 
Ich muss euch um Hilfe bitten. Ich bin mit meinem SQL Latein am Ende und das ist zugegeben noch nicht so groß, aber ich weiss nicht genau wie ich das noch anderes suchen soll, im Internet.

 

Entschuldigt die Form mit den Tabellen, aber eigenfügen hat noch geklappt. Die Vorschau war dann fürn A......
 
 
Ich habe zwei Tabellen, diese hier heißt arpreis, die Felder wie die Überschriften
 

Artikelnummer        Preis        VonDatum
12300534             420            01.01.2016
12300534             430           01.02.2016
12300534             440           01.03.2016
12300535             845           01.01.2016
12300535            850            01.02.2016
12300536            1795            01.01.2016
12300536            1800            01.02.2016

 
Aus dieser hole ich mir die jüngsten Werte und schreibe sie in eine andere Tabelle per:
 
 
Insert INTO Kundenpreisaktualisierung (Artikelnummer, Preis1neu, vonDatum)
 
SELECT A.Artikelnummer, A.Preis as Preis1neu, a.Vondatum
FROM arpreis As A INNER JOIN
 
                (SELECT B.Artikelnummer, Max(B.vonDatum) As [Max-Datum]
                FROM arpreis As B
                GROUP BY B.Artikelnummer) As C
 
ON A.Artikelnummer = C.Artikelnummer And
                A.vonDatum = C.[Max-Datum]
 
where A.preistyp ='G' and Typnummer ='1'
 
 Artikelnummer            Preis1alt            Preis1neu            Prozent            VonDatum           
12300534                                                      440                                    01.03.2016           

12300535                                                      850                                    01.02.2016
12300536                                                     1800                                   01.02.2016


 
Jetzt müssen aus der Arpreis Tabelle (oben) die jeweils zweit jüngsten Werte dazu. Das ist nur ein Teil der Tabelle, die wird noch mit vielen Daten gefüllt. es geht aber immer um den jüngsten und den zweitjüngsten Wert.
 


Artikelnummer            Preis            VonDatum

12300534                  420            01.01.2016
12300534                  430            01.02.2016
12300534                  440            01.03.2016
12300535                  845            01.01.2016
12300535                  850            01.02.2016
12300536                1795            01.01.2016
12300536                1800            01.02.2016


 
Mit der Abfrage erwische ich leider alle älteren, nicht nur den einen zweit jüngsten:
 
select * From arpreis as A
right outer Join Kundenpreisaktualisierung as ap
ON Ap.artikelnummer = a.artikelnummer
 
where a.preistyp ='G' and a.vondatum < (select top 1 max(vondatum) from arpreis where preistyp ='G' and artikelnummer = a.artikelnummer)
 

Artikelnummer            VonDatum            Preis      Artikelnummer_1         Preis1neu   vonDatum_1

12300534            01.01.2016            420            12300534                      440           01.03.2016
12300534            01.02.2016            430            12300534                      440           01.03.2016
12300535            01.01.2016            845            12300535                      850           01.02.2016
12300536            01.01.2016            1795          12300536                     1800          01.02.2016
          
 
Also fehlt mir bloss irgendwo eine weitere Eingrenzung. Kann mir jemand helfen?
 
mit Grüßen MG



#2 MDD

MDD

    Newbie

  • 36 Beiträge

 

Geschrieben 06. April 2016 - 12:15

Hallo

 

was für einen Server verwendest du?

 

MDD


Wir finden für jede Lösung ein Problem

Man steckt immer in einem Sumpf voll Arbeit, nur die Tiefe ändert sich.


#3 Christoph-MG

Christoph-MG

    Newbie

  • 3 Beiträge

 

Geschrieben 06. April 2016 - 14:03

MS-SQL 2012



#4 wilgin

wilgin

    Member

  • 226 Beiträge

 

Geschrieben 07. April 2016 - 09:03

Hallo,

ich würde versuchen die Aufgabe mit der rank Funktion zu lösen.

Also z.B.:

with maxtwo as(
select
    artikelnummer,
    VonDatum,
    rank() over (partition by artikelnummer order by VonDatum desc) as uRank
from arpreis
)
select * from maxtwo where uRank in (1,2)

Viel Erfolg,


Bearbeitet von wilgin, 07. April 2016 - 09:04.

Wilfried

#5 Christoph-MG

Christoph-MG

    Newbie

  • 3 Beiträge

 

Geschrieben 08. April 2016 - 14:37

Hallo Wilfried,

 

das ist genau das was ich gesucht habe!

 

Hab Vielen Dank!

 

 

 

P.S. Weiss man, was man alles nicht weiss ?