permintaan untuk menemukan tanggal terdekat terdekat

8

Saya punya meja dengan harga. setiap kurs memiliki tanggal mulai yang efektif. (tanggal akhir dari setiap tingkat tersirat oleh adanya catatan dengan tanggal mulai efektif yang lebih baru.) Saya juga memiliki tabel dengan kegiatan. Setiap aktivitas terjadi pada tanggal.

Apa cara terbaik untuk mencocokkan suatu kegiatan dengan tingkat yang efektif pada tanggal itu?

(sayangnya saya tidak memiliki kemampuan untuk mengubah struktur data, jadi menambahkan tanggal akhir yang eksplisit untuk suatu tarif keluar.)

rates:
StartDate Rate
9/1/2010    17.00
10/1/2010   18.70
11/1/2010   20.00

Activities:
WorkCenter  ActionDate Hours
WC1         9/30/2010   10
WC1         10/1/2010   5
WC2         10/30/2010  8
WC2         11/3/2010   9

Desired result:
Workcenter ActionDate   Hours   Rate    Cost(=rate*hours)
WC1         9/30/2010   10      17.00   170.00
WC1         10/1/2010   5       18.70    93.50
WC2         10/30/2010  8       18.70   149.60
WC2         11/3/2010   9       20.00   180.00
Anak nakal
sumber

Jawaban:

11
SELECT 
    a.WorkCenter
  , a.ActionDate
  , a.Hours
  , r.Rate
  , r.Rate * a.Hours  AS Cost
FROM 
    Activities AS a
  JOIN
    Rates AS r
      ON  r.StartDate = 
          ( SELECT MAX(StartDate)
             FROM Rates 
             WHERE StartDate <= a.ActionDate
          ) ;

atau GROUP BYsolusi:

SELECT 
    a.WorkCenter
  , a.ActionDate
  , a.Hours
  , r.Rate
  , r.Rate * a.Hours  AS Cost
FROM 
    Activities AS a
  JOIN
    ( SELECT 
          a.ActionDate
        , MAX(r.StartDate) AS StartDate
      FROM 
          Activities AS a
        JOIN
          Rates AS r
            ON r.StartDate <= a.ActionDate
      GROUP BY a.ActionDate
    ) AS grp
      ON  grp.ActionDate = a.ActionDate
 JOIN
    Rates AS r
      ON  r.StartDate = grp.StartDate ;
ypercubeᵀᴹ
sumber