Sql server 在日期版本上连接两个表
我有两个表:表Sql server 在日期版本上连接两个表,sql-server,Sql Server,我有两个表:表SAMPLES,其中包含样本、样本代码和样本日期;表code,其中包含样本代码、价格和起始日期,起始日期是价格适用的日期。我需要连接这两个表,并根据样本日期返回正确的价格 SEQ_NUM NAME VERSION FROM_DATE PRICE 1 CODE_A 1 2010-03-01 00:00 90 2 CODE_A 2 2011-10-07 00:00 95 3 CODE_A 3
SAMPLES
,其中包含样本、样本代码和样本日期;表code
,其中包含样本代码、价格和起始日期,起始日期是价格适用的日期。我需要连接这两个表,并根据样本日期返回正确的价格
SEQ_NUM NAME VERSION FROM_DATE PRICE
1 CODE_A 1 2010-03-01 00:00 90
2 CODE_A 2 2011-10-07 00:00 95
3 CODE_A 3 2012-05-08 00:00 99
4 CODE_A 4 2015-06-17 00:00 110
5 CODE_B 1 2012-04-01 00:00 10
6 CODE_B 2 2014-07-07 00:00 20
代码
SEQ_NUM NAME VERSION FROM_DATE PRICE
1 CODE_A 1 2010-03-01 00:00 90
2 CODE_A 2 2011-10-07 00:00 95
3 CODE_A 3 2012-05-08 00:00 99
4 CODE_A 4 2015-06-17 00:00 110
5 CODE_B 1 2012-04-01 00:00 10
6 CODE_B 2 2014-07-07 00:00 20
样品
SEQ_NUM NAME VERSION FROM_DATE PRICE
1 CODE_A 1 2010-03-01 00:00 90
2 CODE_A 2 2011-10-07 00:00 95
3 CODE_A 3 2012-05-08 00:00 99
4 CODE_A 4 2015-06-17 00:00 110
5 CODE_B 1 2012-04-01 00:00 10
6 CODE_B 2 2014-07-07 00:00 20
SAMPLE_NUMBER SAMPLE_ID SAMPLE_CODE SAMPLE_DATE
1 ABC12 CODE_A 2010-04-01 00:00
2 ABC13 CODE_A 2015-10-07 00:00
3 ABC14 CODE_A 2012-06-09 00:00
4 ABC15 CODE_B 2014-10-12 00:00
我可以通过以下方式获得特定样品的正确价格:
SEQ_NUM NAME VERSION FROM_DATE PRICE
1 CODE_A 1 2010-03-01 00:00 90
2 CODE_A 2 2011-10-07 00:00 95
3 CODE_A 3 2012-05-08 00:00 99
4 CODE_A 4 2015-06-17 00:00 110
5 CODE_B 1 2012-04-01 00:00 10
6 CODE_B 2 2014-07-07 00:00 20
select MAX(s.SAMPLE_NUMBER), MAX(c1.PRICE_COLLECT), MAX(c1.NAME)
from CODES c1
left join CODES c2 on (c1.SEQ_NUM = c2.SEQ_NUM and c1.VERSION < c2.VERSION)
inner join sample s on s.SAMPLE_CODE = c1.NAME
where c2.SEQ_NUM is null
and c1.FROM_DATE < s.SAMPLED_DATE
and s.SAMPLE_NUMBER = 3
但我想得到整个结果集,如:
SEQ_NUM NAME VERSION FROM_DATE PRICE
1 CODE_A 1 2010-03-01 00:00 90
2 CODE_A 2 2011-10-07 00:00 95
3 CODE_A 3 2012-05-08 00:00 99
4 CODE_A 4 2015-06-17 00:00 110
5 CODE_B 1 2012-04-01 00:00 10
6 CODE_B 2 2014-07-07 00:00 20
s.SAMPLE_NUMBER c.PRICE c.NAME
1 90 CODE_A
2 110 CODE_A
3 99 CODE_A
4 20 CODE_B
有没有一种方法可以在一条SQL语句中实现这一点?然后您可以从查询中删除
s.SAMPLE\u NUMBER=3
,对吗?是的+添加:分组按SAMPLE\u NUMBER,c1.NAME完成了这一操作。非常感谢。
SEQ_NUM NAME VERSION FROM_DATE PRICE
1 CODE_A 1 2010-03-01 00:00 90
2 CODE_A 2 2011-10-07 00:00 95
3 CODE_A 3 2012-05-08 00:00 99
4 CODE_A 4 2015-06-17 00:00 110
5 CODE_B 1 2012-04-01 00:00 10
6 CODE_B 2 2014-07-07 00:00 20