我正在尝试基本协调我拥有的两个单独的付款表,一个在实际付款时将付款作为基础,而另一个在实际处理时付款。某些天才决定将这两个表都具有可以结合在一起的唯一ID并不是一个好主意,因此我不得不走很长一段路。我想象这涉及使用子查询将两个表连接在一起,但是我不知道如何编写它。这是表格,稍后我将解释我想做的事情
img_array = []
for filename in glob.glob('pics/*.png'):
img = cv2.imread(filename)
height, width, layers = img.shape
size = (width, height)
img_array.append(img)
out = cv2.VideoWriter('project.mp4', cv2.VideoWriter_fourcc(*'mp4v'), 30, size) # die Zahl da gibt die FPS an
for i in range(len(img_array)):
out.write(img_array[i])
out.release()
表
payment
account_id payment_refID payment_date Amount
000001 AAA 01/01/2019 5.00
000001 BBB 03/01/2019 5.00
000001 CCC 05/01/2019 5.00
000001 DDD 31/01/2019 5.00
000001 EEE 02/02/2019 5.00
000001 FFF 28/02/2019 5.00
000001 GGG 05/03/2019 5.00
表
transaction
这是到目前为止我的代码的样子
account_id2 payment_refID payment_date Amount
000001 111 08/01/2019 5.00
000001 222 10/01/2019 5.00
000001 333 12/01/2019 5.00
000001 444 08/02/2019 5.00
000001 555 15/02/2019 5.00
000001 666 03/03/2019 5.00
000001 777 12/03/2019 5.00
所以基本上,当我加入表格时,我希望它看起来像这样:
在上面的示例中,联接基本上为1:1,付款参考AAA最高匹配111,BBB最高匹配222
由于某些付款可能会更快或更慢地被处理,并且同一天可能会有多笔付款,因此我将不能只加入一周后的日期。感谢您的帮助
答案 0 :(得分:0)
如果您在payments.payment_refID
和transactions.payment_refID
之间没有关系,则会遇到很大麻烦。
在您的示例AAA中,BBB和CCC都将匹配111,而不是111、222和333,因此,如果您没有关于如何联接表的规则。
如果付款和交易之间的“距离”是固定的(即一周),您可以优化搜索,但不能确定100%,因为当天付款可能会得出错误的结果。
唯一的解决方案是假设两个表中的payment_refID
都是升序的,并且每笔交易都按年代顺序与其付款相关。
因此,您可以为所有付款和所有交易进行编号,并在该柜台上加入它们。
在Microsoft SQL Server中,您可以尝试以下操作:
;with
p as (
select *, ROW_NUMBER() over (partition by p.account_id order by p.payment_date, p.payment_refID) n
from payments p
),
t as (
select *, ROW_NUMBER() over (partition by t.account_id2 order by t.payment_date, t.payment_refID) n
from transactions t
)
select *
from p
join t on p.account_id = t.account_id2 and p.n = t.n