我正在这个阶段进行一个相对简单的查询,我想知道如何在列数据(状态)发生变化时派生出一行数据。我知道这听起来像混乱,我只是不确定如何正确地说出来,所以,我只是要告诉你!
我正在尝试提取列(whse_load_ts)中的最高日期戳,其中列(whse_ac)的值不是Y.我希望它返回一行。
C_CLM C_STA_CLM WHSE_ACTN_CD WHSE_CURR_ROW_IND WHSE_LOAD_TS
12056733 AC U 2012-05-30 03:18:12
目前由于状态c_sta_clm的变化,它返回两行。
C_CLM C_STA_CLM WHSE_ACTN_CD WHSE_CURR_ROW_IND WHSE_LOAD_TS
12056733 AC U 2012-05-30 03:18:12
12056733 PC U 2012-04-28 03:19:38
此特定声明的所有数据如下所示:
12056733 PC I 2012-02-04 03:20:25.150
12056733 PC U 2012-02-07 03:19:43.230
12056733 PC U 2012-02-11 03:21:31.440
12056733 PC U 2012-04-28 03:19:38.380
12056733 AC U 2012-05-17 03:18:25.920
12056733 AC U 2012-05-19 03:20:33.200
12056733 AC U 2012-05-30 03:18:12.370
12056733 TE U Y 2012-06-06 03:20:07.520
查询如下
SELECT
c_clm,
c_sta_clm,
whse_curr_row_ind,
max(whse_load_ts) as "Loaded"
FROM
pearl_p.TLTC900_CLM_PRSST
WHERE
whse_curr_row_ind not in('y')
AND c_clm = '12056733'
group by 1,2,3
基本上,当我只想要whse_curr_row_ind列中没有Y的任何东西的最大日期时,它会拉动每个状态AC / PC的最大日期
答案 0 :(得分:1)
您可以使用子查询执行此操作:
SELECT
p1.c_clm,
p1.c_sta_clm,
p1.whse_curr_row_ind,
p2.Loaded
FROM pearl_p.TLTC900_CLM_PRSST p1
INNER JOIN
(
select max(whse_load_ts) as Loaded, C_CLM
from pearl_p.TLTC900_CLM_PRSST
where whse_curr_row_ind not in('y')
group by C_CLM
) p2
on p1.whse_load_ts = p2.Loaded
and p1.C_CLM = p2.C_CLM
WHERE p1.whse_curr_row_ind not in('y')