我有以下几点
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 我想在这里写两个单独的查询,以便在报告中使用:
查询#1 (我已经开始工作了)
此查询希望在2013-5-10年之前返回其第一个职务提供日期的所有用户。这是一个简单的查询,因为如果用户在该日期之前有任何作业,它将返回他。在本例中,我将看到用户#1,#2。
此查询如下所示:
SELECT DISTINCT j.* FROM job WHERE j.job_offer_date <= '2013-05-10'查询#2 (这是我真正的问题)
我如何返回用户的第一份工作提供日期是在2013年-5-10和之前的2013年-7-19。在这种情况下,由于用户1在2013-5-10年之前有了他的第一份报价,所以他不应该被包括在结果中。这个结果集应该只包括用户#3。
这里最重要的关键是,因为用户#1在2013-5-10年之前已经有了他的第一份服务,所以他应该被排除在查询2中的结果集中。
发布于 2013-06-29 20:00:19
一组相关的第一份工作。
select user_id, min(job_offer_date) as first_offer
from job
group by user_id
having min(job_offer_date) > '2013-05-10'
and min(job_offer_date) < '2013-07-19'加入该集,以获得用户。我猜用户数据存储在用户表中。
select u.*
from users u
inner join (select user_id, min(job_offer_date) as first_offer
from job
group by user_id
having min(job_offer_date) > '2013-05-10'
and min(job_offer_date) < '2013-07-19') o
on o.user_id = u.user_id;发布于 2013-06-29 19:36:40
如果我正确地记住了我的SQL date内容,它会不会是这样的:
SELECT DISTINCT j.* FROM job WHERE j.job_offer_date > '2013-05-10' AND j.job_offer_data < '2013-7-19'编辑:我误解了你的问题。上面将查找在列出的两个日期之间有作业的任何用户(但不是在这两个日期)。奥利·内切特罗有一个更好的答案。
发布于 2013-06-29 19:41:23
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'https://stackoverflow.com/questions/17383994
复制相似问题