-1を返し、特定条件でのMySQLでのUNIXタイムスタンプ内のすべての特定のエポックの範囲内の値の平均値を取得します。

モルテザアリはアーマディ:

私は次のようにいくつかのレコードを持っているMySQLのテーブルを持っています:

unix_timestamp           value

1001                     2
1003                     3
1012                     1
1025                     5
1040                     0
1101                     3
1105                     4
1130                     0
...

私は、次の結果を確認するには、すべての10のエポックの平均を計算したいです:

unix_timestamp_range         avg_value

1001-1010                    2.5
1011-1020                    1
1021-1030                    5
1031-1040                    0
1041-1050                   -1
1051-1060                   -1
1061-1070                   -1
1071-1080                   -1
1081-1090                   -1
1091-1100                   -1
1101-1110                    3.5
1111-1120                   -1
1121-1130                    0
...

私のようないくつかの類似した解答が見たここで、リンクの説明を入力し、ここでは、リンクの説明を入力し、ここでは、リンクの説明を入力しますが、これらの答えは私の特定の質問のためのソリューションではありません。どのように私は、上記の結果を得ることができますか?

ティムBiegeleisen:

これを行う最も簡単な方法は、カレンダーのテーブルを使用することです。このアプローチを考えてみます。

SELECT
    CONCAT(CAST(cal.ts AS CHAR(50)), '-', CAST(cal.ts + 9 AS CHAR(50))) AS unix_timestamp_range,
    CASE WHEN COUNT(t.value) > 0 THEN AVG(t.value) ELSE -1 END AS avg_value
FROM
(
    SELECT 1001 AS ts UNION ALL
    SELECT 1011 UNION ALL
    SELECT 1021 UNION ALL
    ...
) cal
LEFT JOIN yourTable t
    ON t.unix_timestamp BETWEEN cal.ts AND cal.ts + 9
GROUP BY
    cal.ts
ORDER BY
    cal.ts;

あなたは、多くの場合、クエリのこの種を行う必要がある場合は実際には、その代わりとしてラベルインラインサブクエリのcal上で、あなたはすべてのタイムスタンプの範囲を表す完全な専用のテーブルを持っている場合があります。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=16797&siteId=1