1

私は次のものを持っています

user_id job_id job_offer_date 
------- ------ --------------
1          123     2013-05-10 
1          124     2013-07-19
2          127     2013-05-10
3          128     2013-06-15 

レポートで使用する 2 つの個別のクエリをここに記述します。

クエリ #1 (これは既に機能しています)

このクエリは、最初の求人日が 2013 年 5 月 10 日までのすべてのユーザーを返します。これは簡単なクエリです。ユーザーがその日付までに何らかの仕事を持っていれば、そのユーザーが返されるからです。この場合、ユーザー #1、#2 が表示されます。

このクエリは次のようになります。

SELECT DISTINCT j.* FROM job WHERE j.job_offer_date <= '2013-05-10'

QUERY #2 (これは私の本当の質問です)

最初の求人日が 2013 年 5 月 10 日以降で 2013 年 7 月 19 日より前のユーザーを返すにはどうすればよいですか。この場合、ユーザー #1 は 2013 年 5 月 10 日までに最初のオファーを持っているため、結果に含めるべきではありません。この結果セットには、ユーザー #3 のみを含める必要があります。

ここで最も重要なキーは、ユーザー #1 が 2013 年 5 月 10 日までに最初のオファーを持っているため、クエリ #2 の結果セットから除外する必要があることです。

4

5 に答える 5

0

それは間違いなくうまくいくでしょう

WITH TEMP 
AS
(
SELECT *
FROM Job AS J
)

SELECT *
FROM TEMP AS A
WHERE OFFERdATE > '2013-05-10' AND oFFERdATE < '2013-7-19' AND
1 = CASE WHEN (SELECT COUNT(*) FROM TEMP WHERE OFFERdATE <= '2013-05-10' AND USERID = A.USERID) > 0 THEN      0 ELSE 1 END
于 2013-06-29T19:57:46.137 に答える
0
select user_id, job_id, job_offer_date
from 
    (select user_id
        , job_id
        , job_offer_date
        , row_number() over 
                (partition by user_id order by job_offer_date) rown 
     from job) sub
where sub.rown = 1 and sub.job_offer_date > '2013-05-10' and sub.job_offer_date < '2013-07-19'
于 2013-06-29T19:41:23.027 に答える