简体   繁体   中英

Select most recent entry in table by another column

I have 3 SQL tables. StudentTable , FeeAssociationTable and InvoiceTable . StudentTable has primary key of AdmissionNumber , FeeAssociationTable has primary key of FeeAssociationID and InvioceTable has primary key InvoiceID .

The FeeAssociationTable takes AdmissionNumber and assign a fee to it, then while depositing fee the InvoiceTable takes AdmissionNumber and calculate all his fee and subtract from paid and the inserts in the dues.

The problem is; same AdmissionNumber can have multiple row in InvoiceTable, "How can I can select and sum all recent dues of each AdmissionNumber(not repeating)."

Here is some data;

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

Expectation: I want the most recent dues of each student without adding in the previous one.

For example:-

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

There are 3 entries of AdmissionNumber 1 in the InvoiceTable. In the first one there are no due, but in the second entry there are Dues of 700, and in the third the dues of 2200 on AdmissionNumber 1 .

The thing I want to do is select last one which can be done by this code given below:

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

This is for single I want list of recent dues of every student.

Thanks in Advance

Based on your follow up information, I believe the following will give you what you are looking for:

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

They query you tried in your example was close, it just had to be adapted to work for the whole table and not a single AdmissionNumber .

Here is a demo of this working: SQL Fiddle

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM