加入两个单独的 SQL 语句或将计数插入查询

Joining two seperate SQL Statement or inserting count into query

早上好,我无法理解将以下两个查询连接在一起的最佳方式。

第一个代码按名称显示最后一个条目,我想要每次列出名称的次数。在第二个查询中,它正确地计算了名称,但我似乎无法弄清楚如何将计数添加到相同的结果中。

提前致谢

SELECT `TimeStamp` as TimeStamp,`Name`, `Status` ,`Station`,`Role`,`Line`
FROM trs_contact u1 
WHERE  u1.`TimeStamp` = (SELECT MAX(`TimeStamp`) 
                        FROM trs_contact u2 
                        WHERE u1.`Name` = u2.`Name`
                        ) 
SELECT `Name`, COUNT(*) 
FROM `trs_contact` 
GROUP BY `Name` 

这个查询:

SELECT Name, MAX(TimeStamp) TimeStamp, COUNT(*) counter 
FROM trs_contact 
GROUP BY Name                      

returns 最后一个条目和名称在 table 中出现的次数。

加入 table:

SELECT u1.TimeStamp, u1.Name, u1.Status, u1.Station, u1.Role, u1.Line, u2.counter
FROM trs_contact u1 
INNER JOIN (
  SELECT Name, MAX(TimeStamp) TimeStamp, COUNT(*) counter 
  FROM trs_contact 
  GROUP BY Name                      
) u2 ON u2.Name = u1.Name AND u2.TimeStamp = u1.TimeStamp

如果您的 MySql 版本是 8.0+,您可以使用 ROW_NUMBER()COUNT() window 函数

SELECT TimeStamp, Name, Status, Station, Role, Line, counter
FROM (
  SELECT *, ROW_NUMBER() OVER (PARTITION NY Name ORDER BY TimeStamp DESC) rn,
            COUNT(*) OVER (PARTITION NY Name) counter
  FROM trs_contact
) t
WHERE rn = 1