视窗功能

时间:2018-08-01 18:22:20

标签: sql oracle window-functions

我想添加一个窗口功能。

在访问= Y时以TypeError: writerow() takes 2 positional arguments but 5 were given日期为准,并以Associd结尾。

TableA

min

最终结果。

ID    Date      AssocId  Visit
 1     1/1/17    10101     Y
 1     1/2/17    10102     Y

SQL>这给了我最小日期,但是我需要与该日期相关联的AssocId。

ID    Date    AssocId
 1    1/1/17    10101

2 个答案:

答案 0 :(得分:0)

您似乎想要:

select t.*
from table t
where visit = 'Y' and
      date= (select min(t1.date) from table t1 where t1.id = t.id);

答案 1 :(得分:0)

您可以使用FIRST_VALUE()

 SELECT MIN(CASE WHEN A.VISIT = 'Y' THEN A.DATE END) OVER (PARTITION BY ID)  AS MIN_DT,
        FIRST_VALUE(CASE WHEN A.VISIT = 'Y' THEN A.ASSOCID END) KEEP (DENSE_RANK FIRST OVER (PARTITION BY ID ORDER BY A.VISIT DESC, A.DATE ASC),

请注意,这对于条件操作而言有些棘手。我会更倾向于使用子查询来嵌套查询操作。外部表达式为:

SELECT MAX(CASE WHEN Date = MIN_DT THEN ASSOCID END) OVER (PARTITION BY ID)

如果您想按ID这么做,我建议:

select id, min(date),
       first_value(associd) over (partition by id order by date)
from t
where visit = 'Y'
group by id;

也就是说,使用聚合函数。