2

そこで、多数のビデオ ストリームの視聴データを記録するデータ マイニング プログラムを用意しました。ストリームは 24 時間年中無休ではありません。アプリケーションは、各ストリームの統計を 60 秒ごとにチェックします。

私が持っているのは、タイムスタンプ、ストリーム名、および現在の視聴者の列を含む「データ」テーブルの 2 つのテーブルです。ストリームがライブの場合にのみレコードが追加されます。もう 1 つのテーブルは合計テーブルで、タイムスタンプ、合計視聴者数、およびライブ ストリームの数が含まれています。

私が探しているのは、特定の期間における選択した数のストリームの視聴率のグラフを作成することです。

現時点では、合計を取得するためにこれを行っています:

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に保持することを望んでいました.2つのネストされたループよりもはるかに効率的な方法があることを願っています.

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 に答える