Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在日期版本上连接两个表_Sql Server - Fatal编程技术网

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