2

私は次のクエリを持っています:

SELECT distinct person, address, from_date, to_date 
  FROM db
 WHERE '2000-01-01' BETWEEN from_date AND to_date

これは問題ありませんが、2000年1月1日に複数のアドレスを持つ一部の人が戻ってきます。to_dateが最大のアドレスのみを選択したいと思います。

つまり、クエリが次を返す場合:

person-------------address--------from_date--------to_date
1------------------34-------------1999-06-12-------2000-04-04 
1------------------27-------------1999-06-12-------2000-12-12

2行目だけを選びたいです。

次のことで十分でしょうか?

SELECT distinct person, address,from_date, MAX(to_date) 
  FROM db
WHERE '2000-01-01' BETWEEN from_date AND to_date
4

3 に答える 3

4

クエリは次のようになります (ただし、これはさらに単純化できます)。

SELECT db.person, address, from_date,db.to_date
  FROM db, (SELECT person, max(to_date) to_date
            FROM db
           GROUP BY person) db_max
WHERE '2000-01-01' BETWEEN db.from_date AND db.to_date
  AND db.to_date = db_max.to_date
  AND db.person = db_max.person;
于 2013-03-19T11:37:22.723 に答える
1
SELECT person, address,from_date, to_date
  FROM db db_outer
 WHERE '2000-01-01' BETWEEN from_date AND to_date
   AND EXISTS (SELECT 1
                 FROM db db_inner
                WHERE db_outer.person = db_inner.person
             GROUP BY db_inner.person
               HAVING MAX(db_inner.to_date) = db_outer.to_date)
于 2013-03-19T11:36:17.623 に答える
1

サブクエリが必要です: http://allenbrowne.com/subquery-01.htmlが最良の説明です。

于 2013-03-19T11:38:28.603 に答える