2017-01-04 29 views
-2

我正在努力編寫此查詢,我有點難倒。當羣組中的姓氏匹配時顯示記錄的副本

所需的輸出:

ID FIRSTNAME LASTNAME PRODUCTIONUNIT 
1 fname1 lname2   PU1 
2 fname4 lname2   PU1 
3 fname5 lnamex   PU2 
4 fname7 lnamey   PU2 
5 fname8 lname2   PU3 

我想要顯示的記錄每當姓氏是PRODUCTIONUNIT

這是多遠,我已經得到了中相同的,但我沒有得到的結果

SELECT * 
FROM contactversion__c 
WHERE id IN(SELECT id 
       FROM contactversion__c 
       GROUP BY productionunit 
         lastname 
       HAVING Count(DISTINCT lastname > 1)) 
ORDER BY c.`name`, 
      b.`name`; 

http://sqlfiddle.com/#!9/bd0fd0/1

+2

的樣本數據,導致所期望的結果將幫助了我所期望的結果。同樣,最好知道你的查詢不起作用 - 至少有一個問題是所有額外的列。 –

+0

複製到心理論壇,或參閱http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a -very-simple-sql-query – Strawberry

+0

我試圖儘量減少表內容和負載是sqlfiddle希望如果有人會如此友善地看看它agian –

回答

0

感謝大家的幫助,我能夠使用內部連接並與productionunit和lastname匹配來弄清楚它。下面的查詢使用SQLFiddle

SELECT 
     a.id, 
     a.firstname, 
     a.lastname, 
     a.productionunit 
    FROM contactversion a 
    JOIN (SELECT 
      productionunit ,lastname , 
      COUNT(*) AS cnt 
    FROM contactversion 
    GROUP BY productionunit, lastname 
    HAVING count(*)>1) b 
    ON a.lastname = b.lastname and a.productionunit=b.productionunit 

http://sqlfiddle.com/#!9/35701aa/1

0

我很確保一個問題就出在部分

GROUP BY production_unit__c, last_name__c 
HAVING Count(DISTINCT last_name__c > 1) 

這有兩個原因:

  1. 結束括號應> 1之前,對不對?

  2. Count(DISTINCT last_name__c)連同一個group by production_unit_c,last_name_c包括該組中 通過last_name_c總是產率「1」,是嗎?

所以用下面的更換這部分應該做的工作:

GROUP BY production_unit__c 
HAVING Count(DISTINCT last_name__c) > 1 
+0

謝謝但通過更改此查詢不會產生任何結果。這個表有26k條記錄我肯定有一些pu內的匹配 –

+0

你試過運行'SELECT ID FROM contactversion__c GROUP BY production_unit__c HAVING Count(DISTINCT last_name__c)> 1'嗎?它會給你什麼結果嗎? –

+0

沒有子查詢本身沒有結果 –

0

這將導致一個正確的結果,據我理解你的問題/ DB結構。

SELECT  `c`.`id` AS Id, 
      `c`.`first_name__c` AS FirstName, 
      `c`.`last_name__c` AS LastName, 
      `r`.`name` AS RecordType, 
      `p`.`name` AS ProductionUnitName 
FROM  contactversion__c 
INNER JOIN recordtype r ON c.recordtypeid = r.id 
INNER JOIN production_unit__c p ON c.production_unit__c = p.id 
WHERE EXISTS( 
    SELECT  TRUE 
    FROM  contactversion__c 
    WHERE  contactversion__c.production_unit__c = c.production_unit__c 
     AND  contactversion__c.last_name__c = c.last_name__c 
     AND  contactversion__c.id != c.id 
    LIMIT  1 
) 
ORDER BY `RecordType`, `ProductionUnitName` 
相關問題