假设我有以下表格:
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
基本上,我有一个条目/属性类型模式,我正在尝试对其进行版本管理。
如何查询才能始终获得汽车的最新批准版本及其所有属性?请注意,某些属性可能不会在特定版本中更新。例如:在下面的示例中,carid:1的批准版本为
Honda AccordEX color:green doors:4
一些数据来自V3,另一些数据来自V1。
这听起来像是有一个很好的模式来管理这种类型的数据。有人能给我指个方向吗?
发布于 2018-06-08 05:37:07
我认为:
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,但是有一个明显不需要的重复版本字段。
我认为你真的需要修改你的数据模型,并将其规范化一点。
https://stackoverflow.com/questions/50747341
复制相似问题