2017-07-10 44 views
0

每個銷售我有4個表(銷售,用戶,StatusSale和SaleHistory)如何返回最新記錄與特定條件

SaleHistory具有銷售,用戶和StatusSale

我的表SALEHISTORY

外鍵

enter image description here

我想從每個銷售都最後一個記錄選擇的ID,但僅如果的status_sale_id是其中之一:1,10,11,12,13,14 ,15,16,17,18,19]

我使用這個通過出售來獲得最後一個記錄:

SELECT DISTINCT ON(sale_id) * 
FROM sales_status_histories 
ORDER BY sale_id, created_at DESC 

但與條件,我不知道我應該做的。

有人可以幫助我嗎?

+0

您可以按照此處給出的示例進行操作。 https://stackoverflow.com/questions/44654857/get-latest-table-entry-by-a-unique-id-with-multiple-time-stamps/44655191#44655191 – jimmy8ball

回答

1

您將使用status_sale_id的WHERE子句。 例如:

WITH CTE 
AS (
SELECT 
* 
,ROW_NUMBER() OVER (PARTITION BY sale_id ORDER BY created_at DESC) AS rn 
FROM sales_status_histories 

) 
SELECT * 
FROM CTE 
WHERE rn=1 
AND status_sale_id IN (1,10,11,12,13,14,15,16,17,18,19) 
+0

謝謝,但這是行不通的,這個查詢只返回任何時候有這個ID的銷售,而不僅僅是最後一個記錄 – Eduardorph

+0

Eduardorph啊是的,我錯過了,上面我編輯了我的早期帖子,所以它現在使過濾數據的公用表表達式(CTE)用sale_id記錄最後一條記錄的行號,然後在(CTE)之外選擇行號= 1的所有數據,即sale_id的最後一條記錄是什麼 – WJS

+0

再次感謝您,但查詢返回的結果幾乎相同。 sale_id 1的status_sale_id 4作爲最後一個,但你的查詢返回status_sale_id 11,11是第三個記錄=( – Eduardorph