窗口函数——选择最近的一行

Posted

技术标签:

【中文标题】窗口函数——选择最近的一行【英文标题】:window function-choose the most recent row 【发布时间】:2017-08-19 15:19:22 【问题描述】:

我需要根据创建日期选择最近的行。 这是我的桌子:

REF X      REF Y            EMLOYEE CREATION DATE
2879074 DLP/2015.01551-B.01 Didier  3/5/2015
2879074 DLP/2015.00841-A.01 Didier  2/5/2015
2879074 DLP/2015.00146-A.01 jacques 1/8/2015
2879074 DLP/2014.07840-A.02         1/6/2015
2879074 DLP/2014.05967-B.03 diet    6/21/2016
2879074 DLP/2014.05967-B.03 ext     6/21/2016
2879074 DLP/2014.05967-B.02 David   10/21/2015
2879074 DLP/2014.05967-B.02 ieva    10/21/2015
2879074 DLP/2014.05967-B.02 laetitia10/21/2015
2879074 DLP/2014.05967-B.02 PLN 10/21/2015
2879074 DLP/2014.05967-B.01 David   4/14/2015
2879074 DLP/2014.05967-B.01 ieva    4/14/2015
2879074 DLP/2014.05967-B.01 laetitia4/14/2015
2879074 DLP/2014.05967-B.01 PLN    4/14/2015
2733407 DLP/2014.00138-B.03 Andy    9/6/2016
2733407 DLP/2014.00138-B.03 Nell    9/6/2016
2733407 DLP/2014.00138-B.03 stephane9/6/2016
2733407 DLP/2014.00138-B.02 Andy    2/17/2016
2733407 DLP/2014.00138-B.02 Nell    2/17/2016
2733407 DLP/2014.00138-B.02 nicola  2/17/2016
2733407 DLP/2014.00138-B.02 diet    2/17/2016
2733407 DLP/2014.00138-B.01 herve   3/10/2015
2733407 DLP/2014.00138-B.01 nicola  3/10/2015

输出应该是:

Ref x   Ref y   employee           Creation Date
2879074 DLP/2014.05967-B.03 diet    6/21/2016
2879074 DLP/2014.05967-B.03 ext     6/21/2016
2733407 DLP/2014.00138-B.03 Andy    9/6/2016
2733407 DLP/2014.00138-B.03 Nell    9/6/2016
2733407 DLP/2014.00138-B.03 stephane9/6/2016

我猜我必须使用窗口功能,但我无法列出正确的 REF Y。任何帮助将不胜感激 非常感谢

【问题讨论】:

你最近的一行不清楚(至少对我来说) 请张贴 DDL,DML 所涉及的表格,不要张贴图片。拥有此信息有助于其他人快速重现您的问题并更好地解决问题。以下是一些可能有助于您理解的示例。 --样本数据 create table t1 ( id int ) insert into t1 values (1), (2), (1) 我当前的查询/我尝试过的内容: select id,count(*) as cnt from t1 group by id 我当前的结果: id cnt 1 2 2 1 我的预期结果: id cnt 1 2 2 1 1 2 发布涉及的表的ddl,dml有助于其他人快速测试,您可以更快地获得帮助 【参考方案1】:

如果您要查找最近的 5 行,您只需这样做:

SELECT TOP 5 * FROM [tablename] ORDER BY [Creation Date] DESC

不需要开窗函数,除非你想实现更复杂的。

【讨论】:

以上是关于窗口函数——选择最近的一行的主要内容,如果未能解决你的问题,请参考以下文章

窗口函数从每个组中获取第一行和最后一行

重学SQL窗口函数

使用'parititon by'和窗口函数在postgres中返回多于一行?

大数据技术-hive窗口函数详解

为啥电脑每次开机都会弹出“函数错误”的窗口?

PySpark 窗口函数标记满足特定条件的每个分区的第一行