使用MAX时检索其他列

时间:2015-07-29 18:45:38

标签: sql database greatest-n-per-group

我有一个名为CEV_CLM_EV的表,其中包含事件的状态。我想尝试提取MAX事件,但我想在查询中的其他地方使用CEV_TYPE。以下是提取所有内容的查询:

SELECT
        CEV_CLM_ID,
        CEV_TYPE,
        CEV_ADD_TS
FROM
        CEV_CLM_EV
WHERE 
        CEV_CLM_ID = 403083306;

结果:

CEV_CLM_ID  CEV_TYPE CEV_ADD_TS                
----------- -------- --------------------------
  403083306 O        2015-03-11-10.03.51.412566
  403083306 O        2015-03-11-10.04.27.102384
  403083306 DN       2015-03-11-10.04.27.733790

如果我去MAX(CEV_ADD_TS),我需要只分组无效的CEV_CLM_ID。但如果我按CEV_CLM_ID AND CEV_TYPE分组,我会得到重复的内容,如:

SELECT
        CEV_CLM_ID,
        CEV_TYPE,
        MAX(CEV_ADD_TS)
FROM
        CEV_CLM_EV
WHERE 
        CEV_CLM_ID = 403083306
GROUP BY
        CEV_CLM_ID,
        CEV_TYPE

结果:

CEV_CLM_ID  CEV_TYPE 3                         
----------- -------- --------------------------
  403083306 DN       2015-03-11-10.04.27.733790
  403083306 O        2015-03-11-10.04.27.102384

1 个答案:

答案 0 :(得分:0)

如果我正确读取,您需要特定cev_clm_id的最大日期时间,并获得与最大日期时间匹配的关联cev_type吗?

如果是这样,那么你不能用简单的查询来做到这一点:

SELECT *
FROM CEV_CLM_EV AS source
LEFT JOIN (
    SELECT CEV_CLM_ID, MAX(CEV_ADD_TS) AS timestamp
    FROM CEV_CLM_EV
    GROUP BY CEV_CLM_ID
) AS maxes ON
        (source.CEV_CLM_ID = maxes.CEV_CLM_ID )
    AND (source.CEV_ADD_TD = maxes.timestamp)

子查询获取最大时间戳及其关联的ID,然后外部查询连接该时间戳和id以获取其余的关联数据。