SQL Oracle创建视图在查找最近的属性所有者时出错

时间:2013-04-25 00:24:40

标签: sql oracle date view

所以我正在研究数据库的视图。在此视图中,它需要显示一个人拥有的所有属性,并仅显示该属性的当前所有者。它应该完成的方式是查看propertyID的购买日期,并仅显示最新的。

这是我到目前为止的代码:

CREATE VIEW P_OWNERS_AND_PROPERTIES_V AS
SELECT P_OWNER.OWNERID, P_OWNER.LNAME, P_OWNER.FNAME, 
P_PURCHASE.PROPERTYID,P_PURCHASE.PURCHASEDATE
FROM P_OWNER LEFT JOIN P_PURCHASE
ON P_OWNER.OWNERID=P_PURCHASE.OWNERID
WHERE (P_PURCHASE.PURCHASEDATE = (SELECT MAX(P1.PURCHASEDATE) 
FROM P_PURCHASE P1 WHERE P1.OWNERID = P_PURCHASE.OWNERID)) 
OR (P_PURCHASE.PROPERTYID IS NULL);

非常感谢任何帮助。

编辑:清理代码。

1 个答案:

答案 0 :(得分:0)

以下是我要做的事情:

通过ownerid加入p_owner和p_purchase。这会为您提供一个列表,其中显示每个所有者所拥有的所有属性(即所有购买的完整列表)

然后你添加一个解析函数rownum(),你可以通过propteryid进行分区,并通过purchaseate desc进行排序。这会为每行添加一个数字,以便每个属性的最新购买获得rownum()= 1。将此列别名为“purchase_rank”。

Purchase_rank告诉您,每次购买,是否是最新的,从次到期等。

然后将整个事物包装在另一个选择中,在那里过滤“where purchase_rank = 1”,然后选择要查看的列。

无论如何,不​​要回避分析功能。它们可以挽救生命。