我加入了两个普及的数据库。这两个数据库可能具有相同的社会保险号。我正在尝试为这些多个记录中的每一个设置主记录。主要记录应该是最早的Orig_Hire日期和Active =' A'
database_1.demographics
Ss_No Orig_Hire Active
111-00-1111 2015-01-01 A
111-00-1111 2014-01-01 T
111-00-1111 2015-08-07 A
database_2.demographics
Ss_No Orig_Hire Active
111-00-1111 2013-01-01 T
111-00-1111 2012-01-01 T
这是我的问题:
SELECT demo.*,
(select (some logic) from demo WHERE GROUP BY Ss_No) As Primary_Record //this doesnt work
FROM
(SELECT Ss_No, Orig_Hire, Active FROM database_1.demographics
UNION ALL
SELECT Ss_No, Orig_Hire, Active FROM database_2.demographics) demo
还有另一种更好的方法吗?
由于
答案 0 :(得分:0)
您需要分两部分来完成。
首先找到最小值,然后得到与该分钟匹配的记录。
让你的问题简化你的工会demo
SELECT Ss_No, Orig_Hire, Active FROM database_1.demographics
UNION ALL
SELECT Ss_No, Orig_Hire, Active FROM database_2.demographics
因此,找到每个MIN
的{{1}}日期的逻辑将是
SSN
现在你需要找到完整的记录。
SELECT Ss_No, MIN(Orig_Hire) as Orig_Hire
FROM demo
WHERE Active = 'A'
GROUP BY Ss_No
如果SELECT demo.*
FROM demo
LEFT JOIN (
SELECT Ss_No, MIN(Orig_Hire) as Orig_Hire
FROM demo
WHERE Active = 'A'
GROUP BY Ss_No
) min_hire
ON demo.Orig_Hire = min_hire.Orig_Hire
AND demo.Ss_No = min_hire.Ss_No
与MIN(Orig_Hire)
不存在,您将获得一些空值Active = 'A'
,您应该验证这些值。
此外,假设Ss_No没有多行用于相同的Ss_no
答案 1 :(得分:0)
我通过使用PHP解决了这个问题。这是我提出的最简单的方法。
$sql = "SELECT Ss_No, Orig_Hire, Active FROM database_1.demographics
UNION ALL
SELECT Ss_No, Orig_Hire, Active FROM database_2.demographics
ORDER BY 1,3,2 ASC"; /* ORDERBY is important since we are setting the first record*/
$sth = $apex->prepare($sql);
$sth->execute();
$sth->setFetchMode(PDO::FETCH_ASSOC);
$SSN = '';
foreach ($sth as $row) {
if($row['SSN'] != $SSN) {
$row['IsPrimaryAssignment'] = 1;
} else {
$row['IsPrimaryAssignment'] = 0;
}
$SSN = $row['SSN'];
}