2015-11-03 67 views
0

分組這裏的背景,我有一個組的列:採摘一審rows- PostgreSQL的

enter image description here

我只是想在每ACCOUNTID

類型列每次恢復之後的第一ADVANCE

所以我的結果應該與procdates的進步

2015-09-03 09:55:12.228343 
2015-09-04 23:10:42.016903 

這可能在一個查詢?

+3

請勿將示例數據作爲屏幕截圖發佈。將其作爲格式化文本發佈 - 甚至更好:作爲SQL插入腳本。檢查這個問題的更多信息:http://stackoverflow.com/questions/tagged/greatest-n-per-group+postgresql –

回答

0

我對如何得到它找到了!

SELECT * FROM 
(SELECT accountid, 
    procdate, 
     type, 
     value, 
     LAG(type) OVER (ORDER BY procdate ASC) AS previousType 
    FROM transaction) w WHERE previousType = 'RECOVERY'; 
+1

1)您的查詢僅限於一個應用程序 2)它將返回3行而不是2行,如quetion中所述。它將返回以下行: 2015-09-03 09:55:12.228343(row 2) 2013-09-03 23:14:53(第14行) 2015-09-04 23:10:42.016903(row 15) 在你的查詢中,你只考慮previousType ='RECOVERY' 由於type列有3行where type ='RECOVERY'。您的查詢將返回3行。 –

+0

Yep更新了我的答案!你是一個很大的幫助@Himanshugaur :) – Kugutsumen

+1

高興地幫助:) –

0

試試這個:

WITH CTE_PrevType 
AS (
    SELECT accountid 
     ,procdate 
     ,LAG(type, 1, NULL) OVER (
      ORDER BY procdate 
      ) AS PreviousType 
    FROM <Table_Name> 
    ) 
SELECT 
accountid 
,procdate 
,type 
,value 
FROM <Table_Name> AS TN 
INNER JOIN CTE_PrevType CPT 
    ON TN.accountid = CPT.accountid 
     AND TN.procdate = CPT.procdate 
WHERE TN.type = 'ADVANCE' 
    AND CPT.type = 'RECOVERY' 
+0

其實這並沒有工作,但它給了我和關於LAG的想法!謝謝! – Kugutsumen

+0

注意:'CPT.PreviousType ='RECOVERY''你在窗口中缺少一個'PARTITION BY orderid'。 – joop