例如,我有一个带有organization id的reports表,它每年都有多行。
| ID | Organisation ID | Report Year
--------------------------------------
| 1 | 1 | 2016
| 2 | 1 | 2017
| 3 | 12 | 2016
| 4 | 12 | 2017
| 5 | 13 | 2016
| 6 | 13 | 2017
| 7 | 14 | 2016
以及一个报表文件表,如下所示
| ID | Report Type ID | Report ID | Report File
---------------------------------------------------
| 1 | 1 | 1 | org1_test_report_2016.pdf
| 3 | 1 | 3 | org1_test_report_2016.pdf
| 5 | 1 | 5 | org1_test_report_2016.pdf
| 6 | 1 | 6 | org1_test_report_2017.pdf
| 7 | 1 | 7 | org1_test_report_2016.pdf
我想从reports表中获取最新的记录,即如果2016和2017行存在,我想获取2017,如果只有2016行存在,则获取该记录并将其留在reports\u file表中,以获取带有文件名的report\u file列(如果该id存在,则返回null)。像这样的。
| Report ID | Organisation ID | Report File
----------------------------------------------
| 2 | 1 | NULL
| 4 | 12 | NULL
| 6 | 13 | org1_test_report_2017.pdf
| 7 | 14 | org1_test_report_2016.pdf
可能没有解释清楚,如果问题不清楚请告诉我。基本上是想在reports表上按组织id分组,但要获取最新的行,如果存在2017,则获取该行,如果不存在,则获取2016,然后左键连接report\u files表上的该行,以查看文件是否附加到最新的report id,如果是,则返回file,否则返回null。希望这有意义。
提前谢谢。
2条答案
按热度按时间fhity93d1#
根据你想要的结果我想做一个
LEFT JOIN
选择后在中间表上显示如下MAX(Report_Year)
:结果:
在这里摆弄
rhfm7lfc2#
试试这个:
看看它在sqlfiddle上运行。