sql - 按另一列选择表中的最新条目
问题描述
我有 3 个 SQL 表。StudentTable
,FeeAssociationTable
和InvoiceTable
.
StudentTable
有主键AdmissionNumber
,FeeAssociationTable
有主键 ,FeeAssociationID
有InvioceTable
主键InvoiceID
.
收取费用并为其分配费用,然后在存入费用时收取费用并FeeAssociationTable
计算他的所有费用并从已支付的费用中减去并插入会费中。AdmissionNumber
InvoiceTable
AdmissionNumber
问题是; 同样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)
这是我想要的每个学生最近的会费清单。
提前致谢
解决方案
根据您的后续信息,我相信以下内容将为您提供所需的内容:
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
推荐阅读
- algorithm - 查找长度大于 n 的子路径
- ruby-on-rails - 在 RubyXL 上自动调整字体大小
- reactjs - 使用 api 在 React / Laravel 应用程序中发送空文件上传请求
- python - 如何在同一个项目中为 firebase_admin 应用程序的每个实例使用模拟器
- python - TensorFlow 对象检测 cv2.imread 错误
- java - 无法找到请求目标的有效证书路径 - 仅在尝试从 Controller 访问 XML 文件而不是从普通类访问 XML 文件时发生
- android-studio - 升级到 Android Studio 北极狐后 Json 输出文件错误
- java - ClassLoader.getSystemResources(String name) 在 Maven 托管项目中找不到文件
- r - 这个字体真棒图标('齿轮')在R闪亮中不存在
- javascript - 使用 Angular 以 Json 形式检索 Firebase 实时数据库