首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >窗口函数

窗口函数
EN

Stack Overflow用户
提问于 2018-08-01 18:22:19
回答 2查看 1.3K关注 0票数 1

我想添加一个窗口函数。

min日期作为访问日期=Y,结束为Associd。

TableA

代码语言:javascript
复制
ID    Date      AssocId  Visit
 1     1/1/17    10101     Y
 1     1/2/17    10102     Y

最终结果。

代码语言:javascript
复制
ID    Date    AssocId
 1    1/1/17    10101

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

代码语言:javascript
复制
 SELECT MIN(CASE WHEN A.VISIT = 'Y'
 THEN A.DATE END) OVER (PARTITION BY ID) 
 AS MIN_DT,
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-01 18:27:24

您可以使用FIRST_VALUE()

代码语言:javascript
复制
 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),

请注意,对于条件操作来说,这有点棘手。我更倾向于使用子查询来嵌套查询操作。外部的表述是:

代码语言:javascript
复制
SELECT MAX(CASE WHEN Date = MIN_DT THEN ASSOCID END) OVER (PARTITION BY ID)

如果您想在每个ID上都这样做,我建议:

代码语言:javascript
复制
select id, min(date),
       first_value(associd) over (partition by id order by date)
from t
where visit = 'Y'
group by id;

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

票数 1
EN

Stack Overflow用户

发布于 2018-08-01 18:24:20

你似乎想:

代码语言:javascript
复制
select t.*
from table t
where visit = 'Y' and
      date= (select min(t1.date) from table t1 where t1.id = t.id);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51639942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档