SQL-基于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主密钥或唯一约束,那么优化器将在信任约束并返回您的任何行的权利之内。但是,从快速测试中,我不认为这是为此查询的。您的表格上有任何索引吗?

(p.s。我假设您没有从shell提示中运行查询,而是将输出重定向到名称1的文件(

这对我有用:

SELECT * FROM (
    SELECT DATETIME, TAG_NAME, COUNT(*) AS DUPLICATES
    FROM ML_MEASURE 
    GROUP BY DATETIME, TAG_NAME 
) WHERE DUPLICATES > 1

最新更新