我正在使用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