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 |
+---------+---------+---------+---------+------------------+--------------+-------+

18と20は21の重複プロパティであるため、pass_id21と22のみを返すようにします。よろしくお願いします。

4

3 に答える 3

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では、エラーを出す代わりに、各グループの最初の行を返します。この場合、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 に答える