我有以下查询/子查询。我正在尝试从AOD表中的记录以及Employee Original Date表的First和Last中获取CIty,State和Zipcode。谁能提供有关如何从子查询中提取数据的指南?谢谢!
SELECT eod.FIRST_NAME
,eod.LAST_NAME
,eod.SSN
,aodf.SSN
,aodf.CITY
,aodf.STATE
,aodf.ZipCode
FROM EMPLOYEE_ORIG_DATE eod
JOIN
(SELECT aod.ORIG_DATE
,aod.SSN
,aod.ADDRESS_KEY
,aod.Address_1 as AddressLine1
,aod.Address_2 as AddressLine2
,aod.City
,aod.State
,aod.Zip as ZipCode
,aod.Country as CountryCode
,aod.Telephone as HomeNumber
FROM ADDRESS_ORIG_DATE aod
INNER JOIN
(SELECT SSN, MAX(ORIG_DATE) ORIG_DATE
FROM ADDRESS_ORIG_DATE
GROUP BY SSN) aod2
ON aod.SSN = aod2.SSN
AND aod.ORIG_DATE = aod2.ORIG_DATE) aodf
ON eod.SSN = aodf.SSN
AND eod.ADRESS_KEY = aodf.ADDRESS_KEY
WHERE EMPLOYEE_ORIG_DATE.P_COMPANY_ID_I = 3149
答案 0 :(得分:0)
如果您要求重写以简化查询,那么您可以考虑使用DENSE_RANK()
分析函数来包括所有用于返回记录的匹配关系:
SELECT CITY, STATE, ZipCode, FIRST_NAME, LAST_NAME
FROM
(
SELECT eod.FIRST_NAME,
eod.LAST_NAME,
eod.SSN,
aod.SSN,
aod.CITY,
aod.STATE,
aod.ZipCode,
DENSE_RANK() OVER ( PARTITION BY SSN ORDER BY ORIG_DATE DESC ) ORIG_DATE
FROM EMPLOYEE_ORIG_DATE eod
JOIN ADDRESS_ORIG_DATE aod
ON eod.SSN = aod.SSN
AND eod.ADRESS_KEY = aod.ADDRESS_KEY
WHERE P_COMPANY_ID_I = 3149
)
WHERE ORIG_DATE = 1
其中PARTITION BY
替换GROUP BY
,而ORIG_DATE DESC
替换MAX(ORIG_DATE)
答案 1 :(得分:0)
如果您只想要ADDRESS_ORIG_DATE
中每个SSN
的{{1}}中的最新行,那么我希望有窗口函数。
我猜想即使在最近的日期有重复,您也只需要一行,所以我建议EMPLOYEE_ORIG_DATE
:
ROW_NUMBER()