2014-03-03 412 views
0

我想從另一個已經填充(歷史記錄)和種類混亂的新表中填充新的表(Items)。從一組重複值中返回一個主鍵

史列:
PK1 PK2 SERIAL ID_NUMBER日期...

項目表應該有SERIAL作爲PK和獨特ID_NUMBER(就像一個PK太)

所以我想從歷史選擇,幾列,條件是SERIAL和ID_NUMBER將是唯一的。

我已經實現只用SERIAL和ID_NUMBER返回group by子句的重複,但是當我詢問其他列時,它說他們也必須在group by子句中。我把它們放回去,還給我更多我不想要的記錄。

所以我想要從重複的值中檢索一整行。當然還有獨特的人

比方說:
+-------------------------------------------------------------+ | PK1 PK2 ID_NUMBER SERIAL DATE MORE_COLUMNS... | +--------------------------------------------------------------+ | 123 1 ABC21 ZXC1 20-1-2011 | | 123 2 ABC00 ZXC2 30-1-2011 | | 234 1 ABC00 ZXC2 20-4-2011 | | 345 1 ABC21 ZXC1 10-5-2011 | | 567 1 ASD31 QWE1 23-1-2012 | +--------------------------------------------------------------+

我要回:

+--------------------------------------------------------+ | PK1 PK2 ID_NUMBER SERIAL DATE MORE_COLUMNS... | +--------------------------------------------------------+ | 123 1 ABC21 ZXC1 20-1-2011 | | 234 1 ABC00 ZXC2 30-1-2011 | | 567 1 ASD31 QWE1 23-1-2012 | +--------------------------------------------------------+

問候

回答

0

首先嚐試合併PK1PK2例如在oracle您可以使用mysqlPK1||PK2CONCAT(PK1,PK2),此查詢在oracle正常工作:

SELECT * FROM YOUR_TABLE 
WHERE (PK1||PK2) IN (SELECT MIN(PK1||PK2) from YOUR_TABLE 
GROUP BY ID_NUMBER,SERIAL); 
+0

一起工作(...)WHERE( PK1 || PK2)IN(... GOURP BY ID_NUMBER)和(PK1 || PK2)IN(... GROUP BY SERIAL)。 非常感謝 – ncurrin

0
Select distinct ID_NUMBER, SERIAL, DATE, MORE_COLUMNS 
from (the first query) src 
0

如果你想找回一個的PK1,PK2值,你可以做

SELECT 
    MIN(PK1) as [PK1] 
    ,MIN(PK2) as [PK2] 
    ,ID_NUMBER 
    ,SERIAL 
    ,DATE 
    , . . . 
FROM (. . .) 
GROUP BY ID_NUMBER, SERIAL, DATE, ...