所以我没有SQL经验,但我没有资源用于识别重复项。
问题:SER_NO(序列#)可以显示在2个不同的日期(EVENT_TS),我只想看到SER_NO出现的第一个出现。
如果我有选择,我会保留SER_NO出现的日期,而不是之后的任何其他日期,但此时,我只是不想看到重复的SER_NO
我去了SELECT DISTINCT路线并且这没有帮助......我需要确定SER_NO是否出现多次,然后如果确实如此,我的目标是保持第一次出现(MIN DATE)。
SELECT
EVENT_TS, EVENT_NO, FAC_PROD_FAM_CD, SER_NO, DISC_AREA_ID, DISC_AREA_DESC,
QUALITY_VELOCITY, CMPNT_SERIAL_NO, PROTOTYPE_IND, EXT_CPY_STAT
FROM ABUS_DW.V_BIQ_R8_QWB_EVENTS
WHERE
(FAC_PROD_FAM_CD='ACOM' OR FAC_PROD_FAM_CD='SCOM' OR FAC_PROD_FAM_CD='LAP' OR
FAC_PROD_FAM_CD='RM' OR FAC_PROD_FAM_CD='SCRD')
AND (DISC_AREA_ID='400' OR DISC_AREA_ID='450')
AND PROTOTYPE_IND<>'Y' AND EXT_CPY_STAT<>'D'
AND EVENT_TS>=<Parameters.Start Date> ORDER BY EVENT_TS
此外,我在Tableau的自定义SQL查询功能中执行此操作... ...在不了解SQL或基本语法的情况下...似乎不喜欢任何花哨的技巧。也许它确实...我不知道......但我所得到的只是使用其他人的脚本的错误。它似乎对它想要看到的语法非常具体。
答案 0 :(得分:0)
假设您选择的所有其他字段(除日期外)也是重复的,您可以使用min(event_ts)
或{{{ 1}}取决于你想看到的内容:
max(event_ts)
如果您的重复记录的每一行都有不同的FAC_PROD_FAM_CD,SER_NO,DISC_AREA_ID等值......那么您必须得到更好的信息。您可以使用相关子查询作为一个选项:
SELECT MIN(EVENT_TS) as EVENT_TS
,EVENT_NO
,FAC_PROD_FAM_CD
,SER_NO
,DISC_AREA_ID
,DISC_AREA_DESC
,QUALITY_VELOCITY
,CMPNT_SERIAL_NO
,PROTOTYPE_IND
,EXT_CPY_STAT
FROM ABUS_DW.V_BIQ_R8_QWB_EVENTS
WHERE FAC_PROD_FAM_CD IN ('ACOM', 'SCOM', 'LAP', 'RM', 'SCRD')
AND DISC_AREA_ID IN ('400','450')
AND PROTOTYPE_IND <> 'Y'
AND EXT_CPY_STAT <> 'D'
AND EVENT_TS >= <Parameters.Start DATE>
GROUP BY
EVENT_NO
,FAC_PROD_FAM_CD
,SER_NO
,DISC_AREA_ID
,DISC_AREA_DESC
,QUALITY_VELOCITY
,CMPNT_SERIAL_NO
,PROTOTYPE_IND
,EXT_CPY_STAT
ORDER BY EVENT_TS
这里,在子查询中,我们得到SELECT EVENT_TS
,EVENT_NO
,FAC_PROD_FAM_CD
,SER_NO
,DISC_AREA_ID
,DISC_AREA_DESC
,QUALITY_VELOCITY
,CMPNT_SERIAL_NO
,PROTOTYPE_IND
,EXT_CPY_STAT
FROM ABUS_DW.V_BIQ_R8_QWB_EVENTS AS t1
WHERE FAC_PROD_FAM_CD IN ('ACOM', 'SCOM', 'LAP', 'RM', 'SCRD')
AND DISC_AREA_ID IN ('400','450')
AND PROTOTYPE_IND <> 'Y'
AND EXT_CPY_STAT <> 'D'
AND EVENT_TS =
(
SELECT MIN(EVENT_TS)
FROM ABUS_DW.V_BIQ_R8_QWB_EVENTS
WHERE FAC_PROD_FAM_CD IN ('ACOM', 'SCOM', 'LAP', 'RM', 'SCRD')
AND DISC_AREA_ID IN ('400','450')
AND PROTOTYPE_IND <> 'Y'
AND EXT_CPY_STAT <> 'D'
AND EVENT_TS >= <Parameters.Start DATE>
AND t1.EVENT_ID = EVENT_ID
)
ORDER BY EVENT_TS;
min(event_ts)
给定所有相同的WHERE条件,然后我们通过event_id
限制主查询。