2012-04-02 4 views
1

Ich habe zwei Tabellen mit den folgenden (vereinfachte) Strukturen:Finding Startdate, EndDate aus zwingenden Startdaten

  1. Tabelle „Faktoren“, die gekaufte Daten über Waren halten Faktoren und haben diese Spalten:

    FactorSerial, PurchaseDate, PurchasedGood

  2. Tisch "Preise", die Warenpreise an verschiedenen Tagen

    Serial, GoodCode hält, EvaluationDate, Preis

Ein Preis ist gültig, bis eine neue Zeile mit dem gleichen Code aber anderes Datum hinzugefügt und aktualisiert somit seinen Wert

Nun, ich möchte eine Tabelle erstellen, die den Preis auf die Adds Tabelle 1 nach Kaufdatum. Also, wenn wir haben:

PurchaseDate PurchasedGood 
----------------------------- 
    05/20/2011  A111 

und:

GoodCode EvaluationDate Price 
-------------------------------- 
    A111  02/01/2011  100 
... 
    A111  04/01/2011  110 
... 
    A111  06/01/2011  120 

das Ergebnis wäre

PurchaseDate PurchasedGood Price 
----------------------------------- 
    05/20/2011  A111   110 

Bevorzugte Methode der Ansicht Preise1 als

Serial GoodCode StartDate EndDate Price 

schafft und dann Faktoren mit verbinden diese Ansicht von

PurchasedDate between StartDate AND EndDate 

Kann mir jemand zeigen, wie man view1 erstellt (oder das Endergebnis mit einer anderen Methode erhalten)? Danke im Voraus!

P.S. Entschuldigung für mein schlechtes Englisch!

+4

Welche RDBMS (SQLServer, Oracle, MySQL, usw.) verwenden Sie? –

Antwort

0

Ich möchte eine Tabelle erstellen, die den Preis der Tabelle 1 nach Kaufdatum hinzufügt.

Hier ist eine Abfrage, die solche Daten zurückgibt. Die Syntax ist ziemlich Standard-SQL, glaube ich, aber das wurde auf SQL Server getestet (sieht so aus, als ob Sie PostgreSQL mit Ihrer "seriellen" Benennung verwenden).

select a.FactorSerial, a.PurchasedGood, a.PurchaseDate 
    , (select max(Price) from Prices where GoodCode = a.PurchasedGood and EvaluationDate = a.EvaluationDate) as Price 
from (
    select f.FactorSerial, f.PurchasedGood, f.PurchaseDate, max(p.EvaluationDate) as EvaluationDate 
    from Factors as f 
     join Prices as p on f.PurchasedGood = p.GoodCode 
    where f.PurchaseDate >= p.EvaluationDate 
    group by f.FactorSerial, f.PurchasedGood, f.PurchaseDate 
) as a 

Diese Abfrage geht davon aus, dass es keine Käufe gibt, bevor ein Preis existiert.

Auch Berücksichtigung

bevorzugte Methode Preise1 als

Serial GoodCode StartDate EndDate Price 

Die Ansicht ist die Erstellung und dann Factors mit dieser Ansicht durch

PurchasedDate between StartDate AND EndDate 

between Füge ist inklusive.Mit dieser Methode, die Sie beschrieben haben, würden Sie doppelte erhalten, wenn ein PurchaseDate auf dem EndDate einer Zeile und dem StartDate eines anderen liegt.

Verwandte Themen