1

我正在使用Aginity Workbench一个数据库,Netezza并且我试图根据它IS在三个(可服务性)列中的任何一个列中具有一个代码来返回具有最早日期的记录。一个有多个记录ICS_UID,但我只想返回最早出现的记录,其中包含IS代码。

下面是我一直在尝试使用的代码,但它似乎返回了记录具有IS代码的所有实例,而不是ICS_UIDwhere 子句中的 's 选择。感谢任何帮助或建议。

SELECT 
ICS _UID, min(MOVEMENT_DATE) as MOVEMENT_DATE, CURRENT_A_SERVICABILITY_CODE, CURRENT_B_SERVICABILITY_CODE, 
CURRENT_C_SERVICABILITY_CODE 
FROM 
HUB_MOVEMENT
WHERE 
ICS_UID IN (317517607,317962513,etc,etc…)
AND CURRENT_A_SERVICABILITY_CODE = 'IS' OR CURRENT_B_SERVICABILITY_CODE = 'IS' OR CURRENT_C_SERVICABILITY_CODE = 'IS'
GROUP BY 
ICS_UID, CURRENT_A_SERVICABILITY_CODE,
CURRENT_B_SERVICABILITY_CODE,
CURRENT_C_SERVICABILITY_CODE;
4

1 回答 1

1

不要使用GROUP BY. 如果你想要一个记录,那么:

SELECT m.*
FROM HUB_MOVEMENT m
WHERE ICS_UID IN (317517607,317962513,etc,etc…) AND
      'IS' IN (CURRENT_A_SERVICABILITY_CODE, CURRENT_B_SERVICABILITY_CODE , CURRENT_C_SERVICABILITY_CODE)
ORDER BY MOVEMENT_DATE
LIMIT 1;

如果你想要每行ICS_UID,那么你可以使用ROW_NUMBER()

SELECT m.*
FROM (SELECT m.*,
             ROW_NUMBER() OVER (PARTITION BY ICS_UID ORDER BY MOVEMENT_DATE) as seqnum
      FROM HUB_MOVEMENT m
      WHERE ICS_UID IN (317517607,317962513,etc,etc…) AND
            'IS' IN (CURRENT_A_SERVICABILITY_CODE, CURRENT_B_SERVICABILITY_CODE , CURRENT_C_SERVICABILITY_CODE)
     ) m
WHERE seqnum = 1;
于 2017-04-25T12:26:21.527 回答