Mysql 在SQL中从多行创建一行

Mysql 在SQL中从多行创建一行,mysql,sql,Mysql,Sql,我想创建一行,其中包含表中的所有最新数据,我找到了为每个列分别创建的方法,是否可以在一个查询中创建 这将是想要的答案表: 您可以使用相关子查询: select t.* from table t where time1 = (select max(t1.time1) from table t1 where t1.p_id = t.p_id); 如果需要与max_daye相关的行 您可以将联接与子查询一起用于max time1 select m.p_id, m.aaa, m.bbb, m.c

我想创建一行,其中包含表中的所有最新数据,我找到了为每个列分别创建的方法,是否可以在一个查询中创建

这将是想要的答案表:

您可以使用相关子查询:

select t.*
from table t
where time1 = (select max(t1.time1) from table t1 where t1.p_id = t.p_id);

如果需要与max_daye相关的行 您可以将联接与子查询一起用于max time1

select   m.p_id, m.aaa, m.bbb, m.ccc 
from mytable m
inner join (
  SELECT p_id,  max(time1) max_date 
  FROM   mytable
  group by p_id 
) t on t.max_date =  m.time1  and t.p_id = m.p_id 
或者,如果您只需要每个p_id的最大值,您可以使用

select   m.p_id, max(m.aaa), max(m.bbb), max(m.ccc )
from mytable m
group by m-p_id

可以使用相关子查询获取每个不同ID的每列的“最新”非空值

SELECT t1.p_id,
       (SELECT t2.aaa
               FROM elbat t2
               WHERE t2.p_id = t1.p_id
                     AND t2.aaa IS NOT NULL
               ORDER BY t2.time1 DESC
               LIMIT 1) aaa,
       ...
       (SELECT t2.ccc
               FROM elbat t2
               WHERE t2.p_id = t1.p_id
                     AND t2.ccc IS NOT NULL
               ORDER BY t2.time1 DESC
               LIMIT 1) ccc,
       FROM (SELECT DISTINCT
                    p_id
                    FROM elbat) t1;

同一问题的可能重复,您只是在寻找“最后一个”而不是“第一个”。@uuerdo因为这是针对Postgres的,所以我认为这不是正确的重复链接。虽然它确实是一个复制品,但这一个更接近于一个更有用的“复制品”所以post可能就是这个,因为它引用的是MySQL。@错误2646,该答案也有一个与供应商无关的版本。在这种情况下,我的ccc列将为空,因为没有ccc的数据,其中p_id=1的max time1的问题是并非所有列都已满,在这种情况下,对于p_id 1,ccc列将为空,而您只需要每个p_id的最大值。。。答案已更新。。希望是有用的