【问题标题】:One table, three column MYSQL query question一表三列MYSQL查询题
【发布时间】:2011-03-06 15:08:01
【问题描述】:

参考我之前的问题: One table, two column MYSQL query challenge

命令: "SELECT hostname, GROUP_CONCAT(DISTINCT name) as name FROM cmets GROUP BY hostname"

返回预期结果:

192.168.0.1 用户1,用户2

192.168.3.5 用户3

同一个表“cmets”也有一个“timestamp”字段。如何为使用该 ip 的每个用户添加最新(最新)时间戳?

例子:

192.168.0.1 user1-1277146500,user2-1277250087

192.168.3.5 用户3-1237150048

我尝试了该命令的多种变体,但只能获取所有时间戳,而不是最新的...

另外.. 如果可能的话,在显示之前将纪元时间戳转换为更友好的东西会很好。

【问题讨论】:

    标签: sql mysql


    【解决方案1】:

    varchar 转换为Max(timestamp) 连接到名称并在Group by 子句中添加时间戳

    SELECT hostname,
      GROUP_CONCAT(DISTINCT name, CAST(MAX('timestamp') AS VARCHAR) as name 
    FROM comments GROUP BY hostname
    

    认为它会起作用,虽然我还没有测试过。

    【讨论】:

    • 喜欢“GROUP_CONCAT(DISTINCT name,MAX(timestamp)) as name”?我收到语法错误...
    • 你需要将 Max('timestamp') 转换为 name 的类型,如果 name 是 varchar 然后将 Max('timestamp') 转换为 varchar
    • hm.. 仍在尝试.. "SELECT hostname, GROUP_CONCAT(DISTINCT name,cast(MAX(timestamp) AS varchar)) as name FROM cmets GROUP BY hostname" 返回语法错误...
    • 您评论中的当前示例:“SELECT hostname,GROUP_CONCAT(DISTINCT name, CAST(MAX('timestamp') AS VARCHAR) as name FROM cmets GROUP BY hostname, timestamp”返回语法错误“靠近 'VARCHAR) 作为名称 FROM cmets GROUP BY 主机名,时间戳'"
    • 我添加了缺少的 ")".. 仍然是语法错误........ "GROUP_CONCAT(DISTINCT name, CAST(MAX('timestamp') AS VARCHAR))"
    【解决方案2】:
    SELECT 
         hostname, 
         GROUP_CONCAT(CONCAT_WS("-", name, m_timestamp))
    FROM
         (SELECT 
              hostname, 
              name,
              cast(max(timestamp) as char(24)) as m_timestamp 
         FROM 
              comments 
         GROUP BY 
              hostname,
              name) as A
    GROUP BY 
         hostname
    

    编辑

    根据 OP 的 cmets 将列名更新为时间戳(原为 c_timestamp)

    【讨论】:

    • 在第 1 行得到“ERROR 1054 (42S22): Unknown column 'c_timestamp' in 'field list'”后,我将 c_timestamp 更改为时间戳,之后它运行良好。谢谢!
    • 在原始查询中也进行了相同的更改。干杯!
    【解决方案3】:
    MAX(`timestamp`)
    

    【讨论】:

      【解决方案4】:
       SELECT hostname, GROUP_CONCAT(DISTINCT name) as name, max(TIMESTAMP_FIELD) as timestamp_name FROM comments GROUP BY hostname
      

      【讨论】:

      • 差不多了,除了它显示该主机名的最后一个时间戳,我想显示每个用户名与该主机名一起列出的最后一个时间戳。此示例仅列出一个时间戳,例如:192.168.0.1 user1,user2 1158169709
      猜你喜欢
      • 2010-12-15
      • 1970-01-01
      • 1970-01-01
      • 2012-07-31
      • 2012-07-08
      • 2015-05-22
      • 1970-01-01
      • 2012-05-02
      • 2013-07-13
      相关资源
      最近更新 更多