簡體   English   中英

SQL - 根據 DB2 中的兩列選擇重復項

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM