Sql根据日期从多个表中获取最小值

Sql根据日期从多个表中获取最小值,sql,sql-server,Sql,Sql Server,例如: 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

例如:

    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
所以它选择最小值直到当前日期记录。
提前谢谢

假设date列为date类型,您可以按如下方式连接行表:

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;

您可以使用窗口功能,按项目对记录进行分组,并将框架限制为仅适用于日期小于等于当前记录日期的记录,然后取最小值

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

它是基于标题表中的日期选择的,其中的日期为什么这不只是id上的表之间的连接?我可以请求您在您的答案周围添加一些上下文吗。只有代码的答案很难理解。如果你能在文章中添加更多信息,这将有助于询问者和未来的读者。@RBT解释添加。