Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:为其他列中的每个唯一实体提取与列的最大值相关的行段_Sql - Fatal编程技术网

SQL:为其他列中的每个唯一实体提取与列的最大值相关的行段

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

我有“输入表”,如所附快照所示。 使用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总共有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;