1

テーブルに次の行があります。

user_id school_id graduation_date 
------- --------- ---------------
1             123      2006-05-19 
1             123      2008-05-19
2             123      2006-05-19
2             123      2008-05-19

次のクエリがあります。

SELECT * FROM user_school us, [user] u
WHERE us.user_id = u.user_id
AND us.school_id = 123

ここで最後に句を追加して、SINGLE 行のみを返したいと思います。最新の卒業日を含む行 -- この場合、2 つの行のうちの 2 番目です。学生あたり1行を取得できるようにしたい。というわけで、学生1人あたりの最終卒業日。

編集 - これは、多くの JOINS を含む非常に大きなクエリの要約版であることに注意してください... TOP と ORDER BY を実行しても十分ではありません。GREATEST(date) 関数か何かが必要です。

4

5 に答える 5

3

TOP と ORDER BY について指定した制約があるため、これらを一度に行うことはできません。

最新の卒業日を見つけて、その行を探しに行くことができます。

SELECT *
FROM (
  SELECT user_id,
         school_id,
         row_number() over (partition by user_id order by graduation_date desc) position
  FROM user_school
) us,
[user] u
WHERE us.user_id = u.user_id
  AND position = 1 /* limits to highest graduation date */
于 2013-06-18T01:31:12.717 に答える
2

これを行う最も簡単な方法は、次を使用することですrow_number()

select *
from (SELECT *,
             row_number() over (partition by us.user_id
                                order by graduation_date desc) as seqnum
      FROM user_school us join
           [user] u
           on us.user_id = u.user_id
      where us.school_id = 123
     ) t
where seqnum = 1
于 2013-06-18T01:45:38.630 に答える
1

正直なところ、質問を理解しているかどうかはわかりませんが、得た情報によると、これでうまくいくはずです

SELECT TOP 1 * FROM user_school us, [user] u
WHERE us.user_id = u.user_id
AND us.user_id = 1
ORDER BY u.graduation_date DESC
于 2013-06-18T01:28:46.423 に答える
1

とを使用ORDER BYLIMITます。

SELECT TOP 1 * FROM user_school us, [user] u 
WHERE us.user_id = u.user_id AND us.user_id = 1 
ORDER BY u.graduation_date DESC 
于 2013-06-18T01:28:53.223 に答える
0

次のようなものが必要です。

SELECT
 field1,
 field2, 
 ...
   (SELECT MAX(graduation_date)
                       FROM user_school
                       WHERE user_id = us.user_id) as max_grad_date
FROM
 student_table_name
于 2013-06-18T01:37:40.793 に答える