SQL-如何选择/删除最大值取决于其他两个行

时间:2018-07-09 09:27:28

标签: mysql sql

我是一家房地产租赁公司的实习生。我负责在Symfony下开发CRM。

因此,我的一些实体是物业(房屋)及其可用性。请参阅下面的表格结构。

enter image description here

我现在面临的问题是,可用性是针对每天(例如28 / 01、29 / 01、30 / 01)定义的,而不是针对一天中的范围(例如28/01)定义的-> 30/01)。因此,该表确实很重(〜710 000行)。此外,在我们更改可用性的编辑方式之前,它创建了一个针对同一日期的新行,而不是对其进行编辑。因此,此表中有很多重复项。

我想要的是,通过只对date_modif_availabilitiesdate_availabilities保留在id_properties中具有最大值的行来减轻数据库负担。

例如,如果我有这些行(availability_duplications):

enter image description here

我只想使行保持最新的修饰符,例如(availabilities_keep_max_value):

enter image description here

问题是,我对SQL语言的了解还不够。我能够编写一些基本脚本,但不能编写复杂的子查询。即使有我发现的代码示例。

预先感谢您的帮助。

2 个答案:

答案 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_availabilitiesid_propertiesdate_modif_availabilities的组合是唯一的。

此外,似乎所有列(PK除外)都可能是NULL。对我来说有点奇怪。