【问题标题】:Joining two seperate SQL Statement or inserting count into query加入两个单独的 SQL 语句或将计数插入查询
【发布时间】:2021-09-27 05:30:43
【问题描述】:

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

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

提前致谢

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` 

【问题讨论】:

    标签: mysql join left-join


    【解决方案1】:

    这个查询:

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

    返回最后一个条目和名称在表中存在的次数。

    把它加入桌子:

    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() 窗口函数来实现

    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
    

    【讨论】:

      猜你喜欢
      • 2011-06-25
      • 1970-01-01
      • 2013-02-28
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 2010-10-08
      • 1970-01-01
      相关资源
      最近更新 更多