2

我正在尝试带回属性列表。属性可以有许多“通行证”。我想带回一个独特属性的列表,但如果它们有多个传递,我想要一个具有最大 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 的重复属性。提前致谢。

4

3 回答 3

0

因为您使用的是 mysql,所以您可以使用这个 mysql-only 简洁的解决方案:

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 中,它不会给出错误,而是返回每个组的第一行。在这种情况下,第一行是最大pass_id的,因为数据是这样排序的。

于 2012-10-19T18:15:05.640 回答
0

尝试:

 Select * From passes p
 Where Pass_Id =
     (Select Max(pass_Id) From Passes
      Where Prop_Id = p.Prop_Id)
于 2012-10-19T18:16:20.040 回答
0

试试这个?

Select * From passes p  
Where Pass_Id in
  (Select [Max] = MAX(Pass_ID) OVER(PARTITION BY Prop_Id) 
   From Passes) 
于 2012-10-19T19:02:29.050 回答