2

所以我有一个数据挖掘程序,它记录大量视频流的收视率数据。流不是 24/7。该应用程序每 60 秒检查一次每个流的统计信息。

我有 2 个表,一个“数据”表,其中包含时间戳、流名称和当前查看器的列。仅当流处于实时状态时才会添加记录。另一个表是总计表,它包含时间戳、总收视率和直播的流数。

我要做的是生成一个特定时期内选定数量的流的收视率图表。

目前我一直在这样做以获得总数:

SELECT DATE_FORMAT(FROM_UNIXTIME(timestamp), "%k:%i") as time, viewers FROM
`tftv_totals` WHERE timestamp BETWEEN <START> and <END>

然后,如果我想要单独的流,我会为每个流执行此操作并在 excel 中手动组合:

SELECT timestamp, viewers FROM `tftv_data` 
WHERE timestamp
    name = <Stream Name>
    BETWEEN <Start> and <End>

我想知道是否有任何方法可以产生如下输出:

+------------+---------+---------+---------+
| 时间戳 | 流1 | 流2 | 流3 |
+------------+---------+---------+---------+
| 1361962826 | 2 | 3 | 0 |
| 1361962886 | 3 | 4 | 0 |
| 1361962946 | 4 | 8 | 0 |
+------------+---------+---------+---------+

关键是stream3一直处于离线状态。

我可以在 PHP 中做到这一点,但为了方便起见,我希望将它保留在 SQL 中,并希望有一种比几个嵌套循环更有效的方法。

4

1 回答 1

0

也许是这样的:

SELECT
    timestamp,
    SUM(CASE WHEN tftv_data.name='stream1' THEN tftfv_data.viewers ELSE 0 END) AS stream1,
    SUM(CASE WHEN tftv_data.name='stream2' THEN tftfv_data.viewers ELSE 0 END) AS stream2,
    SUM(CASE WHEN tftv_data.name='stream3' THEN tftfv_data.viewers ELSE 0 END) AS stream3
FROM
    tftv_data
GROUP BY
    timestamp
于 2013-03-01T12:16:09.143 回答