Sql 配置单元-创建数据集,用最常见的
我需要创建一个数据集,该数据集包含与源表相同的行,但将出生日期替换为该人员最常见的出生日期值。如果出现平局,则应使用最近的日期 输入 输出Sql 配置单元-创建数据集,用最常见的,sql,hadoop,hive,Sql,Hadoop,Hive,我需要创建一个数据集,该数据集包含与源表相同的行,但将出生日期替换为该人员最常见的出生日期值。如果出现平局,则应使用最近的日期 输入 输出 1 john doe 06/11/86 01/01/17 2 john doe 06/11/86 01/01/17 3 john doe 06/11/86 01/01/17 4 jane doh 01/01/80 01/01/17 5 jane doh 01/01/80 01/02/17 John Doe最常见于1986年11月6日更新。jane doh更
1 john doe 06/11/86 01/01/17
2 john doe 06/11/86 01/01/17
3 john doe 06/11/86 01/01/17
4 jane doh 01/01/80 01/01/17
5 jane doh 01/01/80 01/02/17
John Doe最常见于1986年11月6日更新。jane doh更新为01/01/80断开连接
我最近的尝试基于一个类似的例子:
SELECT a.id, a.first_name, a.last_name, a.date, b.id FROM
(SELECT first_name, last_name,dob,count(*) FROM table group by first_name, last_name,dob having count(*) in
(SELECT max(total) AS freq FROM
(SELECT first_name, last_name, dob, count(*) AS total FROM table group by first_name, last_name, dob)
AS test_temp group by first_name, last_name)
) a join (select * FROM table) b on (a.id = b.id)
我不仅需要一个解决方案,还需要一个可以从中学习的解释。选择a.id、a.first\u name、a.last\u name、b.dob、a.date
从表a
加入选择不同id、名字、姓氏、dob、countdob作为cnt
根据cnt DESC LIMIT 1 b从表顺序
在a.first_name=b.first_name和a.last_name=b.last_name上
我想试试这个。为了得到最常见的dob,我用一个子选择加入了基表。通过cnt DESC LIMIT 1的订购,我让舒尔获得了最常见的dob,而不会在MaxCountDoB不是唯一的情况下遇到麻烦。然后我就把那个dob加入到每一张有着相同名字和姓氏的唱片中。我希望这能对您有所帮助。您可以使用first_value函数指定出生日期,而无需连接:
SELECT a.id, a.first_name, a.last_name, a.date, b.id FROM
(SELECT first_name, last_name,dob,count(*) FROM table group by first_name, last_name,dob having count(*) in
(SELECT max(total) AS freq FROM
(SELECT first_name, last_name, dob, count(*) AS total FROM table group by first_name, last_name, dob)
AS test_temp group by first_name, last_name)
) a join (select * FROM table) b on (a.id = b.id)
select t.id, t.first_name, t.last_name,
first_value(dob) over (partition by first_name, last_name
order by dob_cnt desc, date desc
rows between unbounded preceding and current row
) as dob_imputed
from (select t.*,
count(*) over (partition by first_name, last_name, dob) as dob_cnt
from t
) t