我需要创建一个数据集,该数据集包含与源表相同的行,但是用为此人找到的最常见的出生日期值替换出生日期。如果有平局,则应使用最近的日期。
输入
id first_name last_name dob date
---------------------------------------------
1 john doe 06/11/85 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/06/87 01/01/17
5 jane doh 01/01/80 01/02/17
输出
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
无名氏是更新06/11/86(最常见的)。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)
我不仅想要一个解决方案,还想要一个我可以从中学习的解释。
2条答案
按热度按时间r1wp621o1#
SELECT a.id, a.first_name, a.last_name, b.dob, a.date FROM table a JOIN (SELECT DISTINCT id, first_name, last_name, dob, count(dob) AS cnt FROM table ORDER BY cnt DESC LIMIT 1) b ON (a.first_name=b.first_name) AND (a.last_name=b.last_name)
我想试试这个。为了得到最常见的dob,我用一个子select连接了基表。与ORDER BY cnt DESC LIMIT 1
我让舒尔获得最常见的dob,以防遇到麻烦max(count(dob))
不是唯一的。然后我就把那个dob加入到每一张唱片里firt_name
以及last_name
. 我希望这对你有帮助。tv6aics12#
你可以用
first_value()
函数指定出生日期,没有JOIN
学生: