0
我还没有在大学完成相关课程,所以我不能确定这个查询是否正确,但它的工作原理,但它看起来太奇怪,所以我需要审查和一些反馈。需要帮助才能在DB2中做出正确的选择查询
我有以下IP_TABLE
表混合主键:ID
+ IP
----------------------------------
| ID | DATE | IP |
----------------------------------
| 1 | 2016-10-01| 1.2.3.10 |
----------------------------------
| 2 | 2016-10-20| 1.2.3.20 |
----------------------------------
| 2 | 2016-10-25| 1.2.3.40 |
----------------------------------
| 3 | 2016-10-01| 1.2.3.10 |
----------------------------------
| 3 | 2016-10-25| 1.2.3.25 |
----------------------------------
我想其中的数据具有相同的ID中的最大值都行,就像下面:
----------------------------------
| ID | DATE | IP |
----------------------------------
| 1 | 2016-10-01| 1.2.3.10 |
----------------------------------
| 2 | 2016-10-25| 1.2.3.40 |
----------------------------------
| 3 | 2016-10-25| 1.2.3.25 |
----------------------------------
现在我有两个查询是做这项工作的:
SELECT * FROM (SELECT ID, MAX(DATE) AS LAST_DATE
FROM IP_TABLE
GROUP BY ID
ORDER BY MAX(DATE) ASC) AS T1
LEFT JOIN IP_TABLE AS T2
ON T1.ID = T2.ID
AND T1.LAST_DATE = T2.DATE
看起来很奇怪,我将自己的表连接起来,不知道它是否正确。
第二个工作查询如下:
SELECT * FROM IP_TABLE AS T1
WHERE DATE = (SELECT MAX(DATE) FROM IP_TABLE WHERE ID = T1.ID)
这恐怕这个查询会导致性能的影响,因为它看起来像为O(n^2),即对每一行,它看起来在所有行。
谢谢它的工作原理,但请你提供一些解释它是如何工作的? – Anatoly
@Anatoly请检查我所做的修改。 –