首页 > 解决方案 > 具有可变列数的mysql查询

问题描述

我有一个看起来像这样的表结构:

id:Bigint(11)
channel_id:Bigint(11)
server_id:Bigint(11)
created:timestamp

我想得到一个表格,显示给定时间段内的条目数(每小时,所以从 00:00-00:59 和 01:00-01:59 等...)对于每个 channel_id 其中 server_id是 X(如果可能,也是所有 channel_id 的总数)。而且我还需要它来显示没有条目的时间段以及该时间段没有消息的channel_ids(所有channel_ids至少在数据集中一次)

我能想到的最好的事情是

SELECT 
    DATE_FORMAT(
    MIN(created),
    '%d/%m/%Y %H:00:00'
  ) AS tmstamp,
  COUNT(*) AS cnt 
FROM
  messages
GROUP BY ROUND(UNIX_TIMESTAMP(created) / 3600)

我找不到关于可变列数的任何信息(因为我不知道给定的 server_id 有多少不同的 channel_id)

感谢您提前提供任何帮助。

编辑:删除了问题的时间段部分,但我的主要问题仍然存在。即使我事先不知道它们,我如何将 channel_ids 作为列。

标签: mysql

解决方案


推荐阅读