2017-01-06 4 views
0

пример:SqL получить минимальное значение из нескольких таблиц на основе даты

Table B      Table A 
ID Item Record     ID Date 
1 pen 10      1 1/1/2015 
1 CD  40      2 7/3/2015 
2 pen 20      3 5/8/2016 
2 CD  50      4 10/12/2016 
3 pen 8 
3 CD  30 
3 pen 5 
4 pen 10 
4 CD  35 

результат в этом:

ID Item Record LowestRecord Date 
1 pen  10  10  1/1/2015 
1 CD  40  40  1/1/2015 
2 pen  20  10  7/3/2015 
2 CD  50  40  7/3/2015 
3 pen  8   5  5/8/2016 
3 CD  30  30  5/8/2016 
3 pen  5   5  5/8/2016 
4 pen  10  5  10/12/2016 
4 CD  35  30  10/12/2016 

поэтому не выбрать минимальное значение до текущей записи даты. благодарит заранее.

+0

это выбрать по дате в таблице заголовка, где дата <= текущая дата записи – user7385063

+1

Почему это не просто соединение между таблицами на 'id'? –

ответ

0

Вы можете использовать оконные функции, где вы группировать записи по пункту, а также ограничить рамки только для записей с датой, не равной дате текущей записи, затем введите мин.

SELECT a.* 
    , min(a.record) 
    OVER (PARTITION BY Item ORDER BY b.[Date] DESC 
      ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS LowestRecord 
    , b.[DATE] 
FROM 
    a JOIN b ON a.id = b.id 
+0

Могу ли я попросить вас добавить еще какой-нибудь контекст вокруг вашего ответа. Кодовые ответы трудно понять. Это поможет читателю и будущим читателям, если вы сможете добавить дополнительную информацию в свой пост. – RBT

+1

@ RBT информация добавлен. – DVT

+0

На самом деле это неправильный ответ. – GurV

1

Предполагая, что столбец дата имеет тип даты, вы можете соединить таблицы строк, как это:

select 
    a.*, 
    min(a.record) over (partition by item order by b.date, b.id) minrecord, 
    b.date 
from tableA a 
inner join tableB b 
on a.id = b.id; 
Смежные вопросы