2017-08-23 17 views
0

私はこれをしばらくはやめていますが、これはおそらく単純なものです。日付に基づいてレコードを選択するSQL

私がしようとしているのは、別のテーブルの日付に基づいてあるテーブルから値を選択することです。その後

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 

私が情報を持つテーブルが

作業を行った際に:彼らは起動時に

は、例えば、私は私が速度を持っているテーブルと日付を持っている

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 

労働者3は23/08で作業率に変化をもたらしました。その日以前のレコードはその日付までの使用率を、その日以降のレコードはその日以降の使用率を使用したいと考えています。追加料金がある場合(2週間後など)、Rate_dateの後のレコードでそのレートを使用したいが、以前のレコードでrelevent日付を使用したい。

+0

申し訳ありません、私の悪い、MS SQL –

答えて

0

我々が想定できる場合は、クロスはあなたのRDBMSで提供されて適用されます...

これは、本質的にWorkInfo からすべてのレコードを選択し、その労働者のための作業日以下のみ、最新のレート記録。

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は、テーブル間の相関を使用してWIのすべてのレコードに対してクエリを実行することが基本的です。一般的に、これらのクエリは非常に効率的です。

関連する問題