2016-12-21 2 views
3

Вот пример, как это довольно трудно объяснить:Выберите поле из записей, которая находится между датами

Таблица один:

| Date  | Place ID | 
========================== 
| 01-Feb-2013 | 1  | 
| 21-Jun-2015 | 2  | 

Таблица два:

| Place ID | Date Ranked | Score | 
================================== 
| 1  | 01-Jan-2012 | 2  | 
| 1  | 01-Jan-2014 | 1  | 
| 1  | 01-Jan-2010 | 3  | 
| 2  | 01-Jan-2016 | 1  | 

То, что я хочу произойдет с SQL (MS), когда возвращается первая запись таблицы 1. Я хочу, чтобы в тот момент, когда счет был возвращен со второй таблицы. Таким образом, в этом примере оценка должна быть равна 2, как и после 01 января 2012 года, но до 01 января 2014 года. И когда возвращается вторая запись из таблицы 1, она должна возвращать NULL или blank из таблицы 2, поскольку для этого времени не было баллов.

Надейтесь, что имеет смысл !!

ответ

2

В SQL Server, вы можете использовать outer apply:

select t1.*, t2.score 
from table1 t1 outer apply 
    (select top 1 t2.* 
     from table2 t2 
     where t2.placeid = t1.placeid and 
      t2.dateranked <= t1.dateranked 
     order by t2.dateranked desc 
    ) t2; 

В этом случае, вы можете сделать то же самое с коррелированных подзапросов, а также.

Смежные вопросы