从tbl1获取所有记录,从tbl2获取匹配(或下一个关闭)记录,匹配​​基于客户端编号和从tbl1到tbl2的日期

时间:2019-11-08 19:55:03

标签: sql sql-server

我正在尝试从Tbl1匹配到Tbl2(或下一个更大的匹配)。

条件是

  1. 从tbl1提取所有记录,从tbl2提取接近或相等的匹配
  2. 从tbl2查找匹配记录(匹配基于ClientNo和/或日期)
  3. tbl2匹配应基于大于或等于tbl1日期的日期。
  4. 结果不应与tbl1或tbl2重复

第一个匹配项应是tbl2中的第一个date2大于或等于tbl1中的date1

如果同一日期有多个记录,则应根据tbl2中的RefNO选择下一个更大或相等的日期。

tbl1包含

RecNo  ClientNo   Date1
-----------------------------
  4      1001      2/6/2017
  3      1001      2/4/2018
  1      1001      2/5/2018
  2      1001      2/5/2018
  5      1002      3/8/2018
  9      1002      3/9/2018
 10      1002      4/11/2019

tbl2包含

RecNo   ClientNo   Date2      RefNo
-----------------------------------
   1    1001       2/5/2017     1
   4    1001       2/5/2018     2
   2    1001       2/5/2018     4
   3    1001       2/6/2018     5
   5    1002       3/9/2018     1
   6    1002       4/10/2019    2

查询结果

RecNoTbl1   ClientNo   Date1       RecNoTbl2   Date2     RefNo
---------------------------------------------------------------
    4        1001      2/6/2017      4         2/5/2018    2
    3        1001      2/4/2018      2         2/5/2018    4
    1        1001      2/5/2018      3         2/6/2018    5
    2        1001      2/5/2018      NULL      NULL       NULL
    5        1002      3/8/2018      5         3/9/2018    1
    9        1002      3/9/2018      6         4/10/2019   2
   10        1002      4/11/2019     NULL      NULL       NULL

我尝试了ROW OVER PARTITION,但是那没用。

1 个答案:

答案 0 :(得分:0)

您可以使用像这样的左联接查询

Select tb1.*, tb2.* from table1 tb1 
Left join table2 tb2 ON tb1.clientno = tb2.clientno Where tb1.date>=tb2.dare

对于独特的,您可以使用不同的 像这样:select distinct tb1.title

选中this link

有关与众不同

的更多信息

很抱歉,如果事情还没有很详细。我正在通过电话发帖。