2016-09-27 51 views
0

我有一個表:PostgreSQL的:查詢從同桌

id1 | date  | idreff | 
A11 | 2015-01-01| A11 
B12 | 2016-02-03| A11 
C53 | 2016-05-26| A11 

ID1有一個IDreff。我想從日期提取兩種年齡: 1.交易本身的年齡 2.基於IDreff的第一筆交易的年齡。

所以,我想這樣的結果:

id1 | date  | idreff | Age of Transaction | Age IDreff 

A11 | 2015-01-01| A11  
B12 | 2016-02-03| A11  
C53 | 2016-05-26| A11 

我如何得到的結果兩種查詢(交易ID1和IDreff歲)在相同的查詢?

我試着用這樣的:

SELECT *, age(t1.date) AS age1, age(t2.date) FROM table t1, table t2 WHERE t1.idreff=t2.id1 

但是因爲給我翻倍每一行的結果是不正確的。

回答

0

您可以修改這樣的SQL:

SELECT 
    t1.*, age(t1.date) AS age1, age(t1.date, t2.date) 
FROM 
    table t1, table t2 
WHERE 
    t1.idreff=t2.id1 
+0

該查詢給我相同的結果,我以前的查詢。有雙重結果。 – bandungeuy

+0

哦,對不起,我不明白。你能展示一些結果的例子嗎? @bandungeuy –

0

你應該寫更精確的加入:

SELECT 
    *, 
    age(t1.date) AS age1, 
    age(COALESCE(t2.date,t1.date)) as base_age 
FROM 
    table t1 
LEFT JOIN table t2 ON (t1.idreff=t2.id1 AND t1.id1<>t2.id1) 
WHERE 1 = 1