2

我们的 mysql 数据库处理化学化合物的仓储和季度更新。我们有兴趣在最近的季度上传中找到独特的化合物 - 所以以前从未见过的化合物 (ChemID)。

我已经使用在挖掘类似问题/解决方案时发现的日期范围尝试了下面的一些代码,但无法让它适用于我的应用程序。这是我的尝试 1,它返回 NULL 或变化超时(使用 ChemCaseReports 中的 13M 行)。

请注意,真正的最新 ImportDate(日期时间类型)是“2012-06-12 05:58:16”。

尝试1:

SELECT DISTINCT ChemID
FROM Chem_CaseReports a 
WHERE a.ImportDate = '2012-06-12 05:58:16'
AND NOT EXISTS
(
 SELECT * FROM Chem_CaseReports b 
 WHERE a.ChemID = b.ChemID
 AND b.ImportDate <= '2012-06-12 05:58:16'
)

子查询中的 * 是否有必要避免 ChemID.a 和 .b 之间的歧义?我是否需要添加一个 GROUP BY 或 HAVING 子句,或者最初在我的初始选择中提供一个聚合参数,如 GROUP_CONCAT。

我有数学学习障碍,所以问题可能就像我的日期时间翻转 gt、eq 或 lt 符号一样简单。

谢谢你的帮助!

4

1 回答 1

1

乍一看,您需要更改的<=只是<

基本原理

您的原始NOT EXISTS使用<= 包括您需要保留的所有记录。

然后声明变成

SELECT DISTINCT ChemID
FROM Chem_CaseReports a 
WHERE a.ImportDate = '2012-06-12 05:58:16'
AND NOT EXISTS
(
 SELECT * FROM Chem_CaseReports b 
 WHERE a.ChemID = b.ChemID
 AND b.ImportDate < '2012-06-12 05:58:16'
)
于 2012-06-14T18:30:22.340 回答