我正在寻找相同的行,并且当生日日期字段为<script>
//created a variable for instructions
var instructions = '<h1><center>You will see three different symbols appear</center></h1>';
//Created a button
var button = document.createElement('button');
button.innerHTML = 'Click here to Start';
var body = document.getElementsByTagName('body')[0];
body.appendChild(button);
button.addEventListener('click', function(){
if('click'){
document.open(newPage)
}
});
//Pressing a key (space bar in this case) will open up a blank page with the instructions of the experiment
document.addEventListener('keydown',function(e){
if(e.keyCode==32){
document.location.href=('about:blank');
document.write(instructions)
}
});
</script>
时遇到问题。
我目前有两个脚本,它们可以识别我正在寻找的三种相同性,但是我想用一种来实现。
是的,可以将数据更新为使用一个已知的日期,这可能意味着空值,但是我不想更改数据或将其复制到新表中。
我确实设法创建了一个脚本来完成所有工作,但是运行起来需要花费大量时间。多亏了answer,我才能够做到这一点。这两个脚本的运行时间均不到一秒钟,而单个脚本则需要26分钟。
与空生日匹配的脚本1,但缺少相同的名字
null
脚本2缺少空生日
SELECT last_name, birthdate, count(distinct first_name)
FROM merged_person
having count(distinct first_name) >1
GROUP BY last_name, birthdate
ORDER BY last_name;
可以找到所有结果但花费太长时间的脚本3变体。
变体1
SELECT *
FROM merged_person
WHERE (last_name, birthdate) IN
(SELECT last_name, birthdate
FROM merged_person
GROUP BY last_name, birthdate
HAVING COUNT(*) > 1
)
ORDER BY last_name, birthdate;
变体2
SELECT *
FROM merged_person
WHERE (last_name, nvl(birthdate, '0001-01-01')) IN
(SELECT last_name, nvl(birthdate, '0001-01-01')
FROM merged_person
GROUP BY last_name, birthdate
HAVING COUNT(*) > 1
)
ORDER BY last_name, birthdate;
使用SELECT *
FROM merged_person
WHERE (last_name, nvl(to_char(birthdate, 'DD-MM-YYYY'), '00-00-0000')) IN
(SELECT last_name, nvl(to_char(birthdate, 'DD-MM-YYYY'), '00-00-0000')
FROM merged_person
GROUP BY last_name, birthdate
HAVING COUNT(*) > 1
)
ORDER BY last_name, birthdate;
无法捕获所有案件。
有没有一种方法可以提高性能,或者有另一种方法来使空生日匹配?
编辑:
相同性是具有相同的姓氏和生日的记录,其余字段对于匹配而言并不重要,但它们是名字,文件号,员工ID,性别,一堆雇用信息。
在处理生产数据时,无法显示任何返回的行。
示例
识别横幅广告很容易。造成问题的是赖斯。
答案 0 :(得分:2)
解析函数可以避免自联接和类型转换的问题:
-姓氏和出生日期相同的人。 选择名字,姓氏,生日 从 (
--All rows, with a count of people with same last name and birth date.
select first_name, last_name, birthdate,
count(*) over (partition by last_name, birthdate) duplicate_count
from merged_person
) 其中重复计数> = 2 按名字,姓氏,生日排序;
最初的问题始于经典的NULL问题:NULL不等于NULL,但是NULL也不等于NULL。这很令人困惑,需要花一些时间来理解,但是如果您将NULL视为“缺少值”,这确实是有道理的。
使用NVL
来避免NULL问题是一个好主意,但是隐式类型转换可能会引起问题。使用ISO 8601日期文字会更干净。您已经使用了正确的格式,只需将关键字DATE
放在其前面即可。
更改:
nvl(birthdate, '0001-01-01')
收件人:
nvl(birthdate, date '0001-01-01')
答案 1 :(得分:0)