我有两张表,上面有以下信息。不幸的是,我对joins&mysql的基本知识并不能帮助我实现所需的结果集。。。特别是第三点,我无法理解。非常感谢您的帮助。
订单
OrderID OrderDate Client Country
68349 1/1/2018 GSC Ltd US
93909 1/1/2018 XYZ Ltd UK
39900 3/31/2018 ABC Ltd US
69382 4/4/2018 ABC Ltd US
94500 6/21/2018 DEF Ltd US
93911 1/1/2018 TUV Ltd UK
报告
RepID State RepDate Building OrderID
1 AK 1/1/2018 PE James 93909
2 CA 4/2/2018 PE Grid 93909
3 CA 3/31/2018 PMU Jaya 39900
4 WA 4/4/2018 PMU Taman 69382
5 CA 6/21/2018 PE Grid 94500
6 CA 3/31/2018 PMU Wate 39900
我需要选择所有基于:
选择国家/地区=美国的订单
选择作为这些美国订单一部分的报告(即订单id=来自上述结果的订单id)
最重要的是:过滤报告的结果,使其仅显示每个建筑的单个最新报告(基于最近的报告日期)
结果是:
OrderID OrderDate Client Country RepID RepDate Building
68349 1/1/2018 GSC Ltd US - - -
39900 3/31/2018 ABC Ltd US 3 3/31/2018 PMU Jaya
69382 4/4/2018 ABC Ltd US 4 4/4/2018 PMU Taman
94500 6/21/2018 DEF Ltd US 5 6/21/2018 PE Grid
以下结果将被排除在外,因为最近有一份关于“pe grid”的报告:
OrderID OrderDate Client Country RepID RepDate Building
39900 3/31/2018 ABC Ltd US 6 3/31/2018 PE Grid
1条答案
按热度按时间oipij1gg1#
找到每栋楼的最新报告是这里的诀窍。首先,你需要找到最新报告的日期,像这样。
分组保证每个建筑只有一行。
然后您需要将该查询视为一个虚拟表并连接到它(http://sqlfiddle.com/#!9/ade437e/2/0)
注意这里的用法
LEFT JOIN
. 这意味着没有匹配报告的订单仍将显示在结果集中。如果你不想要这些命令,就改变LEFT JOIN
至JOIN
.如果要筛选结果集,请添加
WHERE o.Country = 'US'
(或您选择的过滤器)到查询的结尾。那你可以用ORDER BY
对结果集进行排序。技巧是从内到外构建查询。
顺便说一句,这就是所谓的最大n每组模式。