0

私はこのテーブル(CheckinTable)を持っています:

  • ID
  • 作成した
  • 緯度
  • 経度
  • ユーザーID

user_idUserTable への外部キーです。

より多くのチェックインがあるユーザーごとに、作成されたフィールドに基づいて最新のチェックインを返すクエリを実行する必要があります。

ORDER BY最新のチェックインを変更してフェッチできますDESCが、別の基準 (たとえばWHERE p.latitude BETWEEN 44.00 AND 41.00 AND p.longitude BETWEEN 9.18 AND 9.44) を設定する必要がある場合、これら 2 つのクエリを 1 つに結合して、地理的位置情報句を尊重する最新のチェックインをロードするにはどうすればよいですか?

編集

誤解を避けるために、作成された DESC の順序で、ユーザーの最新のチェックインでのみクエリを実行する必要があります。ユーザーごとに 1 つの最新のチェックインを (テーブル checkin で) 抽出してから、ジオローカリゼーション句を適用する必要があると思います。どうすればそれができますか?

4

3 に答える 3

1

WHERE句とORDER BY句は完全に分離されており、好きなように組み合わせて一致させることができます。はORDER BY常に の後に来る必要がありWHEREます。

SELECT * 
FROM CheckinTable as p 
WHERE p.latitude BETWEEN 44.00 AND 41.00 AND p.longitude BETWEEN 9.18 AND 9.44 
ORDER BY modified DESC
于 2013-04-02T17:54:01.830 に答える
1

あなたの質問を理解していると仮定すると、各ユーザーとその最大(作成)日を返そうとしています。その場合は、通常、テーブル自体を結合します (ただし、RDBMS によっては他のオプションがあります)。

select distinct t.*
from yourtable t
  join (
      select max(created) maxcreated, user_id
      from yourtable
      group by user_id
    ) t2 on t.user_id = t2.user_id and t.created = t2.maxcreated

基準がある場合WHEREは、サブクエリに入れます。

select distinct t.*
from yourtable t
  join (
      select max(created) maxcreated, user_id
      from yourtable
      where latitude between 44.00 and 41.00
      group by user_id
    ) t2 on t.user_id = t2.user_id and t.created = t2.maxcreated

SQL フィドルのデモ

于 2013-04-02T17:54:46.613 に答える