我是一家房地产租赁公司的实习生。我负责在Symfony下开发CRM。
因此,我的一些实体是物业(房屋)及其可用性。请参阅下面的表格结构。
我现在面临的问题是,可用性是针对每天(例如28 / 01、29 / 01、30 / 01)定义的,而不是针对一天中的范围(例如28/01)定义的-> 30/01)。因此,该表确实很重(〜710 000行)。此外,在我们更改可用性的编辑方式之前,它创建了一个针对同一日期的新行,而不是对其进行编辑。因此,此表中有很多重复项。
我想要的是,通过只对date_modif_availabilities
和date_availabilities
保留在id_properties
中具有最大值的行来减轻数据库负担。
例如,如果我有这些行(availability_duplications):
我只想使行保持最新的修饰符,例如(availabilities_keep_max_value):
问题是,我对SQL语言的了解还不够。我能够编写一些基本脚本,但不能编写复杂的子查询。即使有我发现的代码示例。
预先感谢您的帮助。
答案 0 :(得分:0)
您可以使用ObjectId("Actual Id")
:
subquery
但是,如果您对性能感到担忧,则需要在select t.*
from table t
where id_availabilities = (select t1.id_availabilities
from table t1
where t1.id_properties = t.id_properties and
t1.date_availabilities = t.date_availabilities
order by t1.date_modif_availabilities desc
limit 1
);
上进行索引。
答案 1 :(得分:0)
您可以选择不存在修改日期更大的元素的元素。
像这样:
SELECT avl1.*
FROM availabilities avl1
WHERE NOT EXISTS (SELECT *
FROM availabilities avl2
WHERE avl1.date_availabilities = avl2.date_availabilities
AND avl1.id_properties = avl2.id_properties
AND avl2.date_modif_availabilities > avl1.date_modif_availabilities);
这当然具有先决条件,即三列date_availabilities
,id_properties
和date_modif_availabilities
的组合是唯一的。
此外,似乎所有列(PK除外)都可能是NULL
。对我来说有点奇怪。