我如何获得关系表中不为空的最后一个值

时间:2018-10-01 20:43:30

标签: sql sql-server

我需要获取关系表中的最后一个值,但它不会为null。 下表如下:

1 - Invoices
Invoice  Date          Vendor       Amount
A1       2018-08-10    John          150
A2       2018-08-12    Paul          250
A3       2018-08-15    Henry         180

2 - Payments
Check   DateP          Invoice      Vendor     AmountP
101     2018-09-01       A1          John        150
102     2018-09-01       A2          Paul        250
103     2018-09-15       A1          John        150
104     2018-09-10       A3          Henry       180
105     2018-09-10       A3          Henry       180 

结果应该是这样的:

Check   DateP          Invoice      Vendor     AmountP
102     2018-09-01       A2          Paul        250
103     2018-09-15       A1          John        150
105     2018-09-10       A3          Henry       180 

能帮我吗?

2 个答案:

答案 0 :(得分:0)

您可以尝试this

Component

p.s。 check是一个保留关键字,因此,我将其括在方括号中。

答案 1 :(得分:0)

看起来您想要每张发票的最后一笔付款。如果您的DBMS支持,则可以使用row_number()

SELECT check,
       datep,
       invoice,
       vendor,
       amountp
       FROM (SELECT check,
                    datep,
                    invoice,
                    vendor,
                    amountp,
                    row_number() OVER (PARTITION BY invoice
                                       ORDER BY datep DESC) rn
                    FROM elbat) x
       WHERE rn = 1;

如果ORDER BY datep DESC定义了顺序(而不是我假设的ORDER BY check DESC),请用check替换datep