我们的 mysql 数据库处理化合物的仓储和季度更新。我们有兴趣寻找最近每季度上传的独特化合物 - 因此以前从未见过的化合物 (ChemID)。
我已经使用我在挖掘类似问题/解决方案时发现的日期范围尝试了下面的一些代码,但无法使其适用于我的应用程序。这是我的尝试 1,它返回 NULL 或变体超时(在 ChemCaseReports 中处理大约 1300 万行)。
请注意,真正的最新 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 符号一样简单。
感谢您的帮助!
最佳答案
乍一看,您需要更改的是 <=
至 <
理由
你原来的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'
)
关于mysql - 使用 mysql 按数据导入日期按日期在现有数据集中查找唯一/新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11039145/