Mysql 如何在数据库中折叠这些行?

Mysql 如何在数据库中折叠这些行?,mysql,database,Mysql,Database,我想以一组数据结束,这些数据通过最新的时间戳显示给用户。这是我的SQL SELECT t2.unit AS UnitNo, t1.lname AS Name, t4.code_id AS ActivityNo, t5.activity_id AS Active, t4.call_no AS CallNo, t4.acn_id AS CallStatusNo, t2.unit_id AS UnitId, Max(t5.created) created FROM user AS t1 Inner

我想以一组数据结束,这些数据通过最新的时间戳显示给用户。这是我的SQL

SELECT
t2.unit AS UnitNo,
t1.lname AS Name,
t4.code_id AS ActivityNo,
t5.activity_id AS Active,
t4.call_no AS CallNo,
t4.acn_id AS CallStatusNo,
t2.unit_id AS UnitId,
Max(t5.created) created
FROM user AS t1

Inner Join unit AS t2 ON t1.user_id = t2.user_id
Left Join dispatch AS t3 ON t2.unit_id = t3.unit_id
Left Join incident AS t4 ON t4.incident_id = t3.incident_id
Left Join unit_log AS t5 ON t2.unit_id = t5.unit_id
WHERE

t1.id = 1
GROUP BY
t2.unit,
t1.lname,
t4.code_id,
t5.activity_id,
t4.call_no,
t4.acn_id,
t2.unit_id
ORDER BY created desc

我已经包括了一张照片,以显示我的追求。我最后应该是两排。当前此系统上有2个用户,因此每个用户只能看到一个MAXcreated行。即使在分组之后,我也无法通过您在这里看到的内容。如果您想要一行,您必须选择要显示的单元ID和活动ID。您使用的是一对多联接,因此行数当然会成倍增加

您需要按用户和时间戳对行进行排序。请尝试以下操作,只需替换“所有列”行

 SELECT *
    FROM (
    SELECT 
@rn:=if(@prv=product_id, @rn+1, 1) AS rId, 
@prv:=user_id AS user_id, 
ALL your other columns,
timestamp                                                                               
    FROM
      (SELECT t2.unit AS UnitNo,
              t1.lname AS Name,
              t4.code_id AS ActivityNo,
              t5.activity_id AS Active,
              t4.call_no AS CallNo,
              t4.acn_id AS CallStatusNo,
              t2.unit_id AS UnitId,
              Max(t5.created) created
       FROM USER AS t1
       INNER JOIN unit AS t2 ON t1.user_id = t2.user_id
       LEFT JOIN DISPATCH AS t3 ON t2.unit_id = t3.unit_id
       LEFT JOIN incident AS t4 ON t4.incident_id = t3.incident_id
       LEFT JOIN unit_log AS t5 ON t2.unit_id = t5.unit_id
       INNER JOIN
         (SELECT unit_id
          FROM unit_log
          WHERE t1.id = 1
          GROUP BY t2.unit,
                   t1.lname,
                   t4.code_id,
                   t5.activity_id,
                   t4.call_no,
                   t4.acn_id,
                   t2.unit_id
          ORDER BY created DESC ) b
       JOIN
         (SELECT @prv:=0, @rn:=0)tmp
       ORDER BY user_id,
                TIMESTAMP DESC) a
    WHERE rid<=1

您需要删除每行不同的列。例如“Anderson行”-UnitNo、Active和Created是不同的,这意味着它们不能分组。问题是,我需要这些列。子查询会给我我需要的吗?@Nan是活动字段有用还是可以避免?@FayeqAliKhan,实际上,这是它们中最重要的字段all@Nan你能定义活动的目的吗。。我们可以使用一些聚合函数,比如最大或最小超活动吗?Adrian,谢谢。我只是回来回答我自己的问题。我还使用了一个连接,现在它可以工作了。谢谢你的回答,我相信你的回答。如果您的数据结构允许您通过连接来完成,那么速度会快得多。然而,上面的方法适用于任何需要按其他内容对某个内容进行排名的情况。每月最活跃的用户、每年收入最高的客户等等。我最初想建议使用包含用户ID和maxtimestamp的子查询进行内部联接,但不熟悉数据结构。