Sql 向窗口函数添加条件
我有以下形式的数据:Sql 向窗口函数添加条件,sql,hive,Sql,Hive,我有以下形式的数据: page_name user_id date_time input_age result_age Page 1 1420356 2017-11-29 09:25:49 65 Page 1 1516923 2017-11-29 10:47:15 65 Page 1 1518546 2017-11-29 13:16:34 65 Page 1 151
page_name user_id date_time input_age result_age
Page 1 1420356 2017-11-29 09:25:49 65
Page 1 1516923 2017-11-29 10:47:15 65
Page 1 1518546 2017-11-29 13:16:34 65
Page 1 1518546 2017-11-29 13:21:26 78
Page 1 1503723 2017-11-29 10:41:57 59
Page 1 1503723 2017-11-29 10:46:34 59
Page 1 1761217 2017-11-29 15:59:16 65
Page 1 1761217 2017-11-29 16:01:59 72
Page 1 1761217 2017-11-29 16:05:59 67
Page 1 1943018 2017-11-29 11:27:14 65
Page 1 1943018 2017-11-29 11:29:52 67
Page 1 2421391 2017-11-29 09:40:41 63
Page 1 2421391 2017-11-29 09:45:24 63
Page 1 2421391 2017-11-29 09:51:06 59
Page 1 2421391 2017-11-29 10:14:51 63 59
Page 1 2425813 2017-11-29 10:24:26 60
Page 1 2425813 2017-11-29 10:29:14 59
*请注意,数据超过1天,并且有多个页面
我要查找的是根据每个页面名称的用户id级别上的最新日期和时间找到的年龄;如果此时结果年龄不为空-无论输入年龄是否为空,都取该值。如果为空,则取输入值。
因此,在用户id/页面名称级别,无论时间如何,生成的年龄都是唯一的
我知道我们需要像按用户id分区的行数,按日期的页面名称顺序,按时间描述为行。。。其中row=1,但我不确定如何添加条件
样本输出:
page_name user_id date_time input_age result_age
Page 1 1420356 2017-11-29 09:25:49 65
Page 1 1516923 2017-11-29 10:47:15 65
Page 1 1518546 2017-11-29 13:21:26 78
Page 1 1503723 2017-11-29 10:46:34 59
Page 1 1761217 2017-11-29 16:05:59 67
Page 1 1943018 2017-11-29 11:29:52 67
Page 1 2421391 2017-11-29 10:14:51 59
Page 1 2425813 2017-11-29 10:29:14 59
谢谢你的帮助
请注意,我的数据位于配置单元中,但我假设它与大多数SQL版本的上下文相似 如果要使用窗口函数获取每x的最新记录,通常将查询(包括窗口函数)放入子查询中,然后将条件放入外部查询中:
SELECT * FROM
(
SELECT
*,
ROW_NUMBER() OVER(PARTITION BY whatever ORDER BY whateveresle) as rown
FROM
joins etc
)a
WHERE
rown = 1
如果您有两个日期,并且您想要其中一个,除非它为null,否则您需要另一个,请使用COALESCEresult\u age,input\u age-如果它有值,则为您提供result\u age,否则输入age。COALESCE接受任意数量的参数,从左到右工作,返回第一个非空参数
最后,我认为您所关注的问题是:
SELECT a.*, COALESCE(a.result_age, a.input_age) as some_age FROM
(
SELECT
table.*,
ROW_NUMBER() OVER(PARTITION BY page_name, user_id ORDER BY date_time DESC) as rown
FROM
table
)a
WHERE
rown = 1
是的,请把样品输出!当然我会的!非常感谢,这正是我想要的。