0

次のSQL選択ステートメントがあります

SELECT first_name, year FROM users WHERE username='$username'

ユーザー レコードは 2012 年、2011 年など、1 年ごとに存在する可能性があるため、これは多くの結果を返す可能性があります。したがって、ユーザー レコードが存在する最新の年からユーザーの詳細のみを取得したいと考えています。

どうすればこれを行うことができますか?

ありがとう

4

5 に答える 5

2
Select top 1 first_name, year 
from users 
where username ='$username' 
order by year desc
于 2013-01-25T14:49:07.597 に答える
1

ユーザーの最大年を見つけ、それをネストして、その年の 1 つのレコードのみを選択することができます。

SELECT first_name, year FROM users U1 WHERE username='$username'
 and year = (select max(year) FROM users U2 WHERE U1.username=U2.username)
于 2013-01-25T14:53:29.337 に答える
0

PostgreSQL の最も単純な形式:

SELECT first_name, year
FROM   users
WHERE  username = '$username'
ORDER  BY year DESC
LIMIT  1;
于 2013-01-25T17:06:21.443 に答える
0

これを行うにはいくつかの方法があります。

これが単一のユーザーにのみ必要な場合は、Avitus の回答 (TOP の代わりに LIMIT を使用して Postgres に調整されたもの) がおそらく最適です。ユーザーが同じ「上位」年を持つ行を複数持っている場合、表示されるのは 1 つだけであることに注意してください。おそらくこれで問題ありませんが、そうでない場合は、次の解決策で修正できます。

単一のステートメントで複数のユーザーに対してこれが必要な場合、このようなものは、おそらく user1988097 からの相関サブクエリを使用するよりも高速です。

select first_name, 
       year
from (
   select first_name,
          year,
          max(year) over (partition by username) as max_year
   from users
) t
where year = max_year;

結果には好きなだけ列を追加できますが、内部クエリと外部クエリでそれを行う必要があります。

于 2013-01-25T15:06:21.757 に答える
0

MySQL

SELECT first_name,MAX(year)
FROM users
WHERE username = 'username'

それ以外に、GROUP BY句を追加する必要があります。

SELECT first_name,MAX(year)
    FROM users
    WHERE username = 'username'
    GROUP BY username
于 2013-01-25T14:49:01.000 に答える