我有两个日期列date1和date2,并且我只想将date1早于date2中最早的日期的id用作每个id,例如date1 <= min(date2)。例如:
ID ::: Date1 ::: Date2
ID_1 ::: 2010-01-01 ::: 2010-04-03
ID_1 ::: 2010-03-02 ::: 2010-04-03
ID_1 ::: 2007-05-04 ::: 2008-04-05 <--- I would this
我遇到汇总问题。 我应该将date1添加到子句group by,但是会得到不需要的结果。我该如何解决这个问题?在下面我报告的最终代码中,我将对ID和在Date1中执行的重复测量进行一下操作,该操作是在该ID最早的Date2之前完成的。预先感谢
SELECT ID, count(Date1)
FROM myTable
where (field like '%hi%')
group by ID, Date1
having (count(Date1) <= 500
and Date1 <= min(Date2))
order by ID
答案 0 :(得分:1)
如果要原始行,可以使用窗口功能:
select t.*
from (select t.*, min(date2) over (partition by id) as min_date2
from mytable t
) t
where date1 < min_date2;
如果只想输入ID,则是说min(date1) < min(date2)
,因此聚合就足够了:
select id
from mytable
group by id
having min(date1) < min(date2);
而且,如果需要,可以改为使用相关子查询:
select t.*
from mytable t
where t.date1 < (select min(t2.date) from mytable t2 where t2.id = t.id);