分組這裏的背景,我有一個組的列:採摘一審rows- PostgreSQL的
我只是想在每ACCOUNTID
類型列每次恢復之後的第一ADVANCE所以我的結果應該與procdates的進步
2015-09-03 09:55:12.228343
2015-09-04 23:10:42.016903
這可能在一個查詢?
分組這裏的背景,我有一個組的列:採摘一審rows- PostgreSQL的
我只是想在每ACCOUNTID
類型列每次恢復之後的第一ADVANCE所以我的結果應該與procdates的進步
2015-09-03 09:55:12.228343
2015-09-04 23:10:42.016903
這可能在一個查詢?
我對如何得到它找到了!
SELECT * FROM
(SELECT accountid,
procdate,
type,
value,
LAG(type) OVER (ORDER BY procdate ASC) AS previousType
FROM transaction) w WHERE previousType = 'RECOVERY';
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行。 –
Yep更新了我的答案!你是一個很大的幫助@Himanshugaur :) – Kugutsumen
高興地幫助:) –
試試這個:
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'
其實這並沒有工作,但它給了我和關於LAG的想法!謝謝! – Kugutsumen
注意:'CPT.PreviousType ='RECOVERY''你在窗口中缺少一個'PARTITION BY orderid'。 – joop
請勿將示例數據作爲屏幕截圖發佈。將其作爲格式化文本發佈 - 甚至更好:作爲SQL插入腳本。檢查這個問題的更多信息:http://stackoverflow.com/questions/tagged/greatest-n-per-group+postgresql –