我有2张桌子([WY WC 2016更改TEMP]和[WC_JURIS_CODES])。我试图根据第一个表中的记录在第二个表中查找记录,但只记录第二个表中最新EFF_TO日期的记录,前提是该WC_CODE没有任何其他记录,其中EFF_TO = NULL。
我从这个SQL开始:
SELECT OLD.[WC_CODE]
,OLD.[EFF_FROM]
,OLD.[EFF_TO]
FROM [WY WC 2016 Changes TEMP] NEW --The SOURCE TABLE
INNER JOIN [WC_JURIS_CODES] OLD on NEW.[WC_CODE] = OLD.[WC_CODE]
WHERE NEW.[Status] = 'N' and (OLD.[JURIS_CODE] = 'WY' and OLD.[EFF_TO] is not NULL) or (OLD.[JURIS_CODE] = 'WY' and OLD.[EFF_TO] is NULL)
ORDER BY OLD.[WC_CODE], OLD.[EFF_FROM]
这是回归:
WC_CODE EFF_FROM EFF_TO
000010 04/01/2011 12/31/2011
000010 01/01/2012 12/31/2012
000010 01/01/2013 12/31/2013
000010 01/01/2014 12/31/2014
000010 01/01/2015 NULL
000020 04/01/2011 12/31/2011
000020 01/01/2012 12/31/2012
000020 01/01/2013 12/31/2013
000020 01/01/2014 12/31/2014
000030 04/01/2011 12/31/2011
000030 01/01/2012 12/31/2012
000030 01/01/2013 12/31/2013
000030 01/01/2014 12/31/2014
我只想看到这个结果:
WC_CODE EFF_FROM EFF_TO
000020 01/01/2014 12/31/2014
000030 01/01/2014 12/31/2014
因为它没有WC_CODE ='000030'或'000020'的其他记录,其中EFF_TO为空,并且这些记录具有最新的(最近的)EFF_TO日期。
我尝试过UNIQUE,DISTINCT,但这些都没有用。我认为我需要识别重复项,然后将它们作为一个组进行查询。毫无头绪!任何帮助将不胜感激。
谢谢!
答案 0 :(得分:0)
如果删除括号,此查询将适用于mysql。您可能需要调整ms sql server。
EFF_FROM
具有最大WC_CODE
的行。NULL
EFF_TO
值的行。喜欢这个......
SELECT
CODES.[WC_CODE], CODES.[EFF_FROM], CODES.[EFF_TO]
FROM [WC_JURIS_CODES] CODES
INNER JOIN (
-- build a derived/temporary table with the largest EFF_CODE for each WC_CODE
-- run this query separately and tweak until it produces the result you want
SELECT
OLD.[WC_CODE], MAX(OLD.[EFF_FROM]) AS MAX_EFF_FROM
FROM [WY WC 2016 Changes TEMP] NEW
INNER JOIN [WC_JURIS_CODES] OLD ON (NEW.[WC_CODE] = OLD.[WC_CODE])
WHERE
-- adjust these as needed
NEW.[Status] = 'N'
AND OLD.[JURIS_CODE] = 'WY'
GROUP BY
OLD.[WC_CODE]
-- join derived table to main table
) MAX_EFF_FROM ON (CODES.[WC_CODE] = MAX_EFF_FROM.[WC_CODE] AND CODES.[EFF_FROM] = MAX_EFF_FROM.[MAX_EFF_FROM])
-- and remove the NULLs
WHERE
CODES.[EFF_TO] IS NOT NULL
限制/注意事项:
EFF_FROM
,因为看起来该值永远不会为空。
EFF_TO
或NULL
EFF_TO
,您还需要确保最多可以有NULL
{{} {1}}每EFF_TO
。WC_CODE
并不总是对应于最大EFF_FROM
)EFF_TO
应该是EFF_FROM
的唯一值。如果不是,结果将是不可预测的。 (WC_CODE
上的唯一索引如果可能的话,将是一个好主意。)