【发布时间】:2018-07-19 05:18:08
【问题描述】:
我找不到我的问题的解决方案。我有两张表 Order 和 OrderDetail。
订单表 (简单版)
| ID | modified |
| 1 | 7.1.2018. |
| 2 | 10.1.2018.|
| 3 | 15.1.2018.|
| 4 | 20.1.2018.|
| 5 | 25.1.2018.|
订单详情(简单版)
| order_id | detail_id | base_price | buy_price | sell_price|
| 1 | 1 | 99.00 | 111.00 | 122.00 |
| 1 | 2 | 82.00 | 95.00 | 117.00 |
| 1 | 3 | 82.00 | 95.00 | 117.00 |
| 2 | 4 | 95.00 | 108.00 | 119.00 |
| 2 | 5 | 86.00 | 94.00 | 115.00 |
| 2 | 1 | 82.00 | 95.00 | 117.00 |
| 3 | 1 | 92.00 | 106.00 | 116.00 |
| 3 | 4 | 90.00 | 100.00 | 120.00 |
| 3 | 5 | 82.00 | 95.00 | 117.00 |
| 4 | 2 | 92.00 | 106.00 | 116.00 |
| 4 | 3 | 90.00 | 100.00 | 120.00 |
| 4 | 1 | 82.00 | 95.00 | 117.00 |
| 5 | 1 | 92.00 | 106.00 | 116.00 |
| 5 | 5 | 90.00 | 100.00 | 120.00 |
| 5 | 3 | 82.00 | 95.00 | 117.00 |
如何从 OrderDetails 表中获取与 Order 表中最后修改的时间戳相关联的行?
结果应该是:
| order_id | detail_id | base_price | buy_price | sell_price | modified |
| 5 | 1 | 92.00 | 106.00 | 116.00 | 25.1.2018.|
| 4 | 2 | 92.00 | 106.00 | 116.00 | 20.1.2018.|
| 5 | 3 | 82.00 | 95.00 | 117.00 | 25.1.2018.|
| 3 | 4 | 90.00 | 100.00 | 120.00 | 15.1.2018.|
| 5 | 5 | 90.00 | 100.00 | 120.00 | 25.1.2018.|
我知道连接表,并从具有所需列的联合表中获取所有行,但我不知道如何从每个 order_id, detail_id 对中仅过滤具有最新时间戳的行。请,任何帮助将不胜感激。
编辑
Firebird 数据库需要查询。
编辑 2。
第一个样本数据在某种程度上具有误导性。请再次查看扩展表和理想结果。 我需要所有不同的行(基于“details_id”)及其最后修改的数据。如何用旧时间戳排除每个“detail_id”的“重复”行,只保留最新时间戳的“detail_id”行???
【问题讨论】:
-
您不想要 Order_ID 1 和 3,因为它们的时间戳比 Order_ID 2 早?
-
@AmithKumar 是的,理解他真正想要的并不容易。阅读他的“编辑 2”部分,就像您从未阅读过问题的先前部分一样。然后它就变得有意义了。
-
更有效的解决方案是使用带有
order by detail_id, modified desc的一次性查询并使用Firebird 3 中引入的窗口功能。但我没有心情再写一个答案。这是使用 FB3 W.Fs 对类似问题的答案。 - stackoverflow.com/a/48325694/976391 -
您使用的是哪个版本的 Firebird?