代码之家  ›  专栏  ›  技术社区  ›  Farhan

按另一列选择表中最近的条目

  •  -3
  • Farhan  · 技术社区  · 6 年前

    我有3个SQL表。 StudentTable , FeeAssociationTable InvoiceTable . 具有主键 AdmissionNumber , 具有主键 FeeAssociationID InvioceTable 具有主键 InvoiceID .

    这个 可联想的 受理号 并向其分配一笔费用,然后在存放费用时 可开票 受理号

    问题是;同样的 受理号 在InvoiceTable中可以有多行, “我如何才能选择和计算每个受理号码(不重复)最近的所有费用。”

    这是一些数据;

    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
    

    有3个条目 AdmissionNumber 1 在InvoiceTable中。第一项没有到期,但第二项有700英镑的应付款,第三项有2200英镑的应付款 受理号1

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

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

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

    提前谢谢

    1 回复  |  直到 6 年前
        1
  •  1
  •   Barry Piccinni    6 年前

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

    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