首页 > 解决方案 > 按另一列选择表中的最新条目

问题描述

我有 3 个 SQL 表。StudentTable,FeeAssociationTableInvoiceTable. StudentTable有主键AdmissionNumber,FeeAssociationTable有主键 ,FeeAssociationIDInvioceTable主键InvoiceID.

收取费用并为其分配费用,然后在存入费用时收取费用并FeeAssociationTable计算他的所有费用并从已支付的费用中减去并插入会费中。AdmissionNumberInvoiceTableAdmissionNumber

问题是; 同样AdmissionNumber可以在 InvoiceTable 中有多行,“我如何选择和汇总每个 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

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

例如:-

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

InvoiceTable中有 3 个条目AdmissionNumber 1。在第一个条目中没有应付款,但在第二个条目中有 700 的会费,在第三个条目中有 2200 的会费AdmissionNumber 1

我想做的事情是选择最后一个,这可以通过下面给出的代码来完成:

SELECT Dues FROM InvoiceTable AS IT
            WHERE IT.InvoiceID = (SELECT MAX(InvoiceID) 
            FROM InvoiceTable WHERE AdmissionNumber = 1)

这是我想要的每个学生最近的会费清单。

提前致谢

标签: sqlsql-servertsql

解决方案


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

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


推荐阅读