2017-07-10 21 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