假设我有这个数据的表:
System CompDate Type
A1 Jan-1 T1
A1 Jan-2 T2
A1 Jan-3 T3
A2 Jan-4 T2
B1 Feb-1 T1
B2 Feb-2 T1
B2 Feb-3 T2
我希望按类型,最大日期不是针对每个系统,而是针对每组系统。 所有的A都被视为一个组,我想将所有的A视为A1和B作为一个组,B1。
所以我的结果是:
A1 Jan-1 T1
A1 Jan-4 T2
A1 Jan-3 T3
B1 Feb-2 T1
B1 Feb-3 T2
我知道我可以按系统做最大日期:
SELECT System, CompDate,Type
FROM TableName T1
WHERE CompDate = (SELECT max(compdate) from tablename T2
WHERE T2.type=T1.type
AND T2.System=T1.System )
但是如何对所有As和B进行分组?在As的值中没有已知的模式,所以也可能是我有系统= M,N,P并且我需要将该集合视为一个组,可能使用标题M.没有表已经定义了“组”系统代码。我只知道数据库外部的分组。
答案 0 :(得分:0)
这是你想要的吗?
select min(system), max(compdate), type
from t
group by (case when system in ('A1', 'A2') then 'A'
when system in ('B1', 'B2') then 'B'
else system
end), type;
或者,您可以将其标记为:
select (case when system in ('A1', 'A2') then 'A'
when system in ('B1', 'B2') then 'B'
else system
end),
max(compdate), type
from t
group by (case when system in ('A1', 'A2') then 'A'
when system in ('B1', 'B2') then 'B'
else system
end), type;
答案 1 :(得分:0)
假设您的系统字段值有2个字符:
SELECT system,
compdate,
type
FROM (SELECT LEFT(system, 1) + '1' system,
compdate,
type,
ROW_NUMBER() OVER (PARTITION BY LEFT(system, 1) + '1', type ORDER BY compdate DESC) rownum
FROM tablename --your table
) a
WHERE rownum = 1
结果
system compdate type
A1 2017-01-01 T1
A1 2017-01-04 T2
A1 2017-01-03 T3
B1 2017-02-02 T1
B1 2017-02-03 T2