2017-08-23 3 views
0

Ich habe mit dieser für eine Weile jetzt fest, aber es ist wahrscheinlich etwas einfaches.Wählen Sie Datensatz basierend auf Datum SQL

Was ich versuche zu tun ist, einen Wert aus einer Tabelle basierend auf Datum aus einem anderen auszuwählen.

Zum Beispiel habe ich eine Tabelle, wo ich Preise haben und ein Datum, wenn sie beginnen:

Rate ID Worker_ID Rate Rate_Date 
1   3   2.50 01-06-2017 
2   4   3.00 01-06-2017 
3   3   4.50 23-08-2017 

Dann habe ich eine Tabelle mit Informationen, wenn die Arbeiten durchgeführt:

LabourID Worker_ID Hours Date 
1    3   2.00 02-06-2017 
2    4   3.50 03-06-2017 
3    3   1.00 23-08-2017 

Arbeiter 3 hatte am 23/08 eine Änderung der Arbeitsrate. Ich möchte, dass die Datensätze vor diesem Datum den Preis bis zu diesem Datum und die Datensätze nach diesem Datum verwenden, um den Preis einschließlich und nach diesem Datum zu verwenden. Wenn es eine zusätzliche Rate gibt, z. B. in 2 Wochen, möchte ich, dass diese Rate in den Datensätzen nach diesem Rate_date verwendet wird, aber vorherige Datensätze, um das relevante Datum zu verwenden.

+0

Sorry meine schlechte, MS SQL –

Antwort

0

Wenn wir Kreuz anwenden annehmen können in Ihrem RDBMS verfügbar ist ...

Dies wählt im Wesentlichen alle Datensätze aus Work und dann nur die letzte Rate Datensatz kleiner als oder gleich dem Arbeits Datum für die Arbeiter.

SELECT * 
FROM WorkInfo WI 
CROSS APPLY (SELECT Top 1 R.* 
      FROM Rate R 
      WHERE WI.Worker_ID = R.Worker_ID 
       and R.Rate_date <= WI.Date 
      ORDER BY Rate_date Desc) 

Cross apply führt im Wesentlichen die Abfrage für jeden Datensatz in WI unter Verwendung der Korrelation zwischen den Tabellen aus. Für solche Abfragen ist es in der Regel äußerst effizient.

Verwandte Themen