2017-02-10 80 views
0

如果我的行話已關閉,請原諒我。我還在學習!根據多列查找具有不同ID的重複行

我剛開始使用Teradata,說實話一直很有趣。然而,我遇到了一段讓我難倒了一段時間的路障。

我成功地選擇一個表從看起來像一個數據庫:

ID  service  date name 

1  service1 1/5/15 john  
2  service2 1/7/15 steve 
3  service3 1/8/15 lola 
4  service4 1/3/15 joan 
5  service5 1/5/15 fred   
6  service3 1/3/15 joan 
7  service5 1/8/15 oscar 

現在我想再次搜索數據庫找到任何重複的ID(例如:看是否服務service1的日期爲1/5/15,名稱爲john,存在於具有不同ID的另一行上。)

起初,我做了這樣的事情:

SELECT ID, service, date, name 
FROM table 
WHERE table.service = ANY(service1, service2, service3, service4, service5, service3, service5) 
AND table.date = ANY('1/5/15', '1/7/15, '1/8/15', '1/3/15', '1/5/15', '1/3/15', '1/8/15') 
AND table.name = ANY('john', 'steve', 'lola', 'joan', 'fred', 'joan', 'oscar'); 

但是,這給了我比我想要的更多的行。

例如:

ID  service  date  name 
92  service3 1/8/15 steve 

是對我沒有用的,因爲我要尋找的是有服務,日期和名稱的任何在上表中的其他ID的相同的組合標識。

像這樣將有利於:

ID  service  date  name 
609  service3 1/8/15 lola 

,因爲它比ID 3.

我很好奇,看看它是可以治療的三列(服務,日期,名稱相匹配)作爲一個矢量,也許選擇那些匹配它的行?

...... 
WHERE (table.service, table.date, table.name) = ANY((service3,1/8/15,lola), (service1, 1/5/15, john), ...etc) 

我的Teradata被降權了,所以我還沒有嘗試上面的例子。儘管如此,任何想法/反饋都非常感謝!

+0

從哪裏來預計輸出中'609'的ID值? –

+0

上表不是我的實際表格;它看起來像它,所以我沒有泄露任何機密信息。但無論哪種方式,我正在尋找的這些重複項是很大數量行的一小部分;我不知道有多少行,我只知道我無法加載它們 – Sam

+0

我在下面給了你一個答案,試試看,如果它不起作用,請發表評論。 –

回答

0

下面的查詢可能是你想要實現的。這將選擇service,datename組合出現多次的ID。

SELECT t1.ID 
FROM yourTable t1 
INNER JOIN 
(
    SELECT service, date, name 
    FROM yourTable 
    GROUP BY service, date, name 
    HAVING COUNT(*) > 1 
) t2 
    ON t1.service = t2.service AND 
     t1.date = t2.date AND 
     t1.name = t2.name 
+0

我認爲這是訣竅;謝謝你的幫助,非常感謝! – Sam

0

除非您絕對必須,否則不要在您的查詢中硬編碼值。取而代之的是,您已經編寫並加入的查詢。

SELECT dupes.* 
FROM (your query) yourquery 
JOIN table dupes 
    ON yourquery.service = dupes.service 
AND yourquery.date = dupes.date 
AND yourquery.name = dupes.name 
1

這是一個窗總結一個簡單的任務:

SELECT * 
FROM tab 
QUALIFY 
    COUNT(*) OVER (PARTITION BY service, date, name) > 1 

這計數與值(如添Biegeleisen的派生表)的相同組合的行數,但不同於標準總結它使所有行。 QUALIFY是一個很好的Teradata語法擴展,以避免派生表。