我想恢复一个属性列表。属性可以有很多“通行证”。我想带回一个唯一属性的列表,但如果它们有多个传递,我想要一个pass_id最大的那个。这就是我到目前为止所做的:
select * from passes
inner join properties on properties.prop_id = passes.prop_id
where pass_id NOT IN (select pass_id from queue where user_id = 1)
+---------+---------+---------+---------+------------------+--------------+-------+
| pass_id | prop_id | user_id | prop_id | full_street_name | house_number | zip |
+---------+---------+---------+---------+------------------+--------------+-------+
| 18 | 21 | 1 | 21 | N KEELER AVE | 6200 | 60646 |
| 20 | 21 | 1 | 21 | N KEELER AVE | 6200 | 60646 |
| 21 | 21 | 1 | 21 | N KEELER AVE | 6200 | 60646 |
| 22 | 22 | 1 | 22 | E CHESTNUT ST | 111 | 60611 |
+---------+---------+---------+---------+------------------+--------------+-------+
我希望它只返回pass_id 21和22,因为18和20是21的重复属性。提前感谢。
答案 0 :(得分:0)
因为您正在使用mysql,所以您可以使用这个仅限mysql的解决方案:
select * from (
select * from passes
inner join properties on properties.prop_id = passes.prop_id
where pass_id NOT IN (select pass_id from queue where user_id = 1)
order by pass_id desc) x
group by prop_id
此查询只是您的原始查询,但按pass_id desc
排序,然后按prop_id
进行分组。
在我知道的每个其他数据库中,这都会导致SQL语法异常,因为有些列没有被分组,而是没有聚合。但是,在mysql中,它不是给出错误,而是返回每个组的 first 行。在这种情况下,第一行是最大的pass_id
,因为数据是按这种方式排序的。
答案 1 :(得分:0)
尝试:
Select * From passes p
Where Pass_Id =
(Select Max(pass_Id) From Passes
Where Prop_Id = p.Prop_Id)
答案 2 :(得分:0)
试试这个?
Select * From passes p
Where Pass_Id in
(Select [Max] = MAX(Pass_ID) OVER(PARTITION BY Prop_Id)
From Passes)