通过另一列选择表中的最新条目

时间:2018-08-17 10:41:42

标签: sql sql-server tsql

我有3个SQL表。 pythonStudentTableFeeAssociationTableInvoiceTable的主键为StudentTableAdmissionNumber的主键为FeeAssociationTableFeeAssociationID的主键为InvioceTable

InvoiceID收取FeeAssociationTable并为其分配费用,然后在存放费用时AdmissionNumber收取InvoiceTable并计算其所有费用,并从已付和插入中减去在会费中。

问题是;相同的AdmissionNumber在InvoiceTable中可以有多行,“如何选择和汇总每个AdmissionNumber的所有最近的应付款(不重复)。”

这是一些数据;

AdmissionNumber

期望: 我想要每个学生的最新会费,而不要添加上一个。

例如:-

37  1   3000    January-2018    3000    0   2018-08-17
38  2   3000    January-2018    3000    0   2018-08-17
39  3   3000    January-2018    3000    0   2018-08-17
40  4   3000    January-2018    3000    0   2018-08-17
41  5   3000    January-2018    3000    0   2018-08-17
42  6   3000    January-2018    3000    0   2018-08-17
43  7   3000    January-2018    3000    0   2018-08-17
44  8   3000    January-2018    3000    0   2018-08-17
45  9   3000    January-2018    3000    0   2018-08-17
46  10  3000    January-2018    3000    0   2018-08-17
47  1   3200    June-2018   2500    700 2018-08-17
48  2   3200    June-2018   2500    700 2018-08-17
49  3   3200    June-2018   2500    700 2018-08-17
50  4   3200    June-2018   2500    700 2018-08-17
51  5   3200    June-2018   2500    700 2018-08-17
52  6   3200    June-2018   2500    700 2018-08-17
53  7   3200    June-2018   2500    700 2018-08-17
54  8   3200    June-2018   2500    700 2018-08-17
55  9   3200    June-2018   2500    700 2018-08-17
56  10  3200    June-2018   2500    700 2018-08-17
57  10  3700    July-2018   2500    1200    2018-08-17
58  9   3700    July-2018   2400    1300    2018-08-17
59  8   3700    July-2018   200 3500    2018-08-17
60  7   3700    July-2018   2000    1700    2018-08-17
61  1   3700    July-2018   1500    2200    2018-08-17
62  2   3700    July-2018   3100    600 2018-08-17

InvoiceTable中有InvoiceId AdmissionNumber TotalFee Month Paid Dues Date 37 1 3000 January-2018 3000 0 2018-08-17 47 1 3200 June-2018 2500 700 2018-08-17 61 1 3700 July-2018 1500 2200 2018-08-17 的3个条目。在第一个中没有应付款,但是在第二个条目中有700的应付款,在第三个条目中,AdmissionNumber 1上的2200的应付款。

我要做的是选择最后一个,可以通过下面的代码完成:

AdmissionNumber 1

这是我要列出的每个学生最近的应付账单。

预先感谢

1 个答案:

答案 0 :(得分:1)

根据您的跟进信息,我相信以下内容将为您提供所需的信息:

SELECT  invoiceId, AdmissionNumber, Dues 
FROM InvoiceTable AS IT
WHERE IT.invoiceId IN (SELECT MAX(invoiceId)
                        FROM InvoiceTable
                        GROUP BY AdmissionNumber)
ORDER BY AdmissionNumber ASC

他们在您的示例中尝试的查询很接近,只需要对其进行调整即可适用于整个表,而不是单个AdmissionNumber

以下是此工作的演示:SQL Fiddle