窗口功能过滤

问题描述 投票:0回答:1

可以用窗口函数进行过滤吗?

我有下表

ID    AssignedDate    StartDate    EndDate   userid   Role
1     1/1/17            1/1/18      2/1/18     rdsd    Red
1     1/15/17           1/1/18      2/1/18     adfd    Red
* 1     12/15/17          1/1/18      2/1/18     dfge    Red

我想看到每个ID一行和一个名为FirstAssgnDate的新列

首先 - 获取在startDate之前发生的所有指定日期,然后在role = REd时获取MAX assignedDate

输出应该是:

ID    FirstAssgnDate    StartDate    EndDate   userid   Role
1     12/15/17            1/1/18      2/1/18    dfge    Red

*应返回此行。 我在想下面的东西?

  Select *
  max(assignedDate) Keep(when AssignedDate < StartDate) As FirstAssgnDate
  from tablea
sql oracle window-functions
1个回答
1
投票

我不认为所以我们需要使用窗口函数简单的聚合函数才能工作,如果你只需要检查角色为Red的那些记录和赋值的<startdate(至少这是我从你的问题中理解的)我们可以在where子句中有这些过滤器如下:

    select id,max(assigneddate),startdate,enddate,userid,role
    from tablea
    where asssigneddate < startdate and 
    role = 'Red'
    group by id,startdate,enddate,userid,role;
© www.soinside.com 2019 - 2024. All rights reserved.