[英]SQL - Select duplicates based on two columns in DB2
我正在使用 DB2 并试图对名为 ML_MEASURE 的表中的重复行进行计数。 我在此表中定义为重复项的是包含相同 DATETIME 和 TAG_NAME 值的行。 所以我在下面尝试了这个:
SELECT
DATETIME,
TAG_NAME,
COUNT(*) AS DUPLICATES
FROM
ML_MEASURE
GROUP BY DATETIME, TAG_NAME
HAVING COUNT(*) > 1
查询没有失败,但我得到一个空结果,尽管我现在至少有一个重复的事实,当我在下面尝试这个查询时,我得到了这个特定 tag_name 和 datetime 的正确结果:
SELECT
DATETIME,
TAG_NAME,
COUNT(*) AS DUPLICATES
FROM
ML_MEASURE
WHERE
DATETIME='2018-03-23 15:09:30' AND
TAG_NAME='HOG.613KU201'
GROUP BY
DATETIME,
TAG_NAME.
第二个查询的结果如下所示:
DATETIME TAG_NAME DUPLICATES
--------------------- ------------ ----------
2018-03-23 15:09:30.0 HOG.613KU201 3
我在第一个查询中做错了什么?
* 更新 *
我的表是按行组织的,不确定这是否有任何区别。
是的,您应该在第一个查询中得到相同的行。 如果您在这两列上有NOT ENFORCED TRUSTED
Primary Key 或 Unique 约束,那么优化器将有权信任该约束并且不返回任何行。 但是,通过快速测试,我认为它不会针对此查询执行此操作。 您是否在表上定义了任何索引?
(PS 我假设您没有从 shell 提示符运行查询并将输出重定向到名称为1
的文件)
这对我有用:
SELECT * FROM (
SELECT DATETIME, TAG_NAME, COUNT(*) AS DUPLICATES
FROM ML_MEASURE
GROUP BY DATETIME, TAG_NAME
) WHERE DUPLICATES > 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.