[英]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.