SQL:为其他列中的每个唯一实体提取与列的最大值相关的行段
我有“输入表”,如所附快照所示。 使用SQL,我打算构建一个“输出表”,其中: “MaxDays”:应显示给定“ID”的最大“天”值SQL:为其他列中的每个唯一实体提取与列的最大值相关的行段,sql,Sql,我有“输入表”,如所附快照所示。 使用SQL,我打算构建一个“输出表”,其中: “MaxDays”:应显示给定“ID”的最大“天”值 “Type_MaxDays”:是与为“MaxDays”标识的最大“Days”相关的“Type”的对应值 “TotalUniqueType”:统计任何给定ID的所有唯一“Type” 例如,对于ID=878,Days=90是(63、90、33、48)的最大值,它对应于Type=A。因此,在输出表中,Max_Days=90,Type_MaxDays=A。由于ID=878
“Type_MaxDays”:是与为“MaxDays”标识的最大“Days”相关的“Type”的对应值 “TotalUniqueType”:统计任何给定ID的所有唯一“Type” 例如,对于ID=878,Days=90是(63、90、33、48)的最大值,它对应于Type=A。因此,在输出表中,Max_Days=90,Type_MaxDays=A。由于ID=878总共有4个唯一的“Type”(即A、B、C、D),所以TotalUniqueType=4 查找“TotalUniqueType”似乎很简单,但是来自python/pandas的背景,我不知道如何使用SQL检索“MaxDays”和“Type_MaxDays”。请告知
一个选项是加入子查询,该子查询为每个
ID
查找最大天数以及不同类型计数。然后,还要选择具有最大天数的行的类型
SELECT
t1.ID,
t1.Days AS MaxDays,
t1.Type AS Type_MaxDays,
t2.TypeCnt AS TotalUniqueType
FROM yourTable t1
INNER JOIN
(
SELECT ID, MAX(Days) AS MaxDays, COUNT(DISTINCT Type) AS TypeCnt
FROM yourTable
GROUP BY ID
) t2
ON t1.ID = t2.ID AND t1.Days = t2.MaxDays;
一个选项是加入子查询,该子查询为每个
ID
查找最大天数以及不同类型计数。然后,还要选择具有最大天数的行的类型
SELECT
t1.ID,
t1.Days AS MaxDays,
t1.Type AS Type_MaxDays,
t2.TypeCnt AS TotalUniqueType
FROM yourTable t1
INNER JOIN
(
SELECT ID, MAX(Days) AS MaxDays, COUNT(DISTINCT Type) AS TypeCnt
FROM yourTable
GROUP BY ID
) t2
ON t1.ID = t2.ID AND t1.Days = t2.MaxDays;
我建议使用窗口功能和聚合:
select id,
max(days) as maxdays,
max(case when seqnum = 1 then type end) as type_at_maxdays,
count(distinct type)
from (select t.*,
row_number() over (partition by id order by days desc) as seqnum
from t
) t
group by id;
我建议使用窗口函数和聚合:
select id,
max(days) as maxdays,
max(case when seqnum = 1 then type end) as type_at_maxdays,
count(distinct type)
from (select t.*,
row_number() over (partition by id order by days desc) as seqnum
from t
) t
group by id;