假设我有以下表格:
Error in .getReactiveEnvironment()$currentContext() :
Operation not allowed without an active reactive context. (You tried to do something that can only be done from inside a reactive expression or observer.)
基本上,我有一个入口/属性类型模式,我试图进行版本管理。
如何查询此内容以始终获取具有所有属性的最新批准版本的汽车?请注意,某些属性可能无法在特定版本中更新。即:在下面的例子中,carid的批准版本:1是
Cars
--------
ID Make Model Version
1 Honda Accord v1
2 Honda Civic v1
3 Honda Odysey v1
1 Honda AccordLX v2
1 Honda AccordEX v3
CarProperties
-------------
CarID key value Version
1 color red v1
1 doors 4 v1
2 color blue v1
2 doors 2 v1
3 color black v1
1 color blue v2
1 color green v3
Versions
-----------
ID Status
v1 Approved
v2 Pending
v3 Approved
来自V3的一些数据和来自V1的其他数据。
这听起来有一个很好的模式来管理这种类型的数据。有人可以指出我正确的方向吗?
答案 0 :(得分:0)
我想这个:
WITH car_version_latest AS (
SELECT c.*, ROW_NUMBER() OVER (PARTITION BY (c.ID, c.Make, c.Model) ORDER BY c.Version DESC) AS rn
FROM Cars AS c
)
SELECT * FROM car_version_latest cvl
WHERE cvl.rn = 1;
会合理地运作,但坦率地说不清楚。
那就是说,你的数据模型坦率地说有点奇怪。您的行具有相同的ID但更改属性(为什么CarProperties中没有make和model?)。
您的CarProperties表是(有点)EAV,但有一个显然不需要的重复版本字段。
我认为你真的需要修改你的数据模型并将其标准化一点。