如何找到比另一列中最早的日期更早的日期;在SQL中

时间:2020-08-30 17:05:44

标签: sql

我有两个日期列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

1 个答案:

答案 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);
相关问题