0

列message_internaldateを含むテーブルメッセージがあります。ここで、数か月にわたって特定の期間 (1 日の各時間) 内のメッセージをカウントしたいと考えています。多くのサブクエリ (24) を使用することで、1 時間あたりのメッセージの合計を取得することができましたが、それを行うためのより賢明な方法があることを願っています。期間が異なることを除いて、サブクエリは似ています。助言がありますか?

例: 最初の 2 時間

SELECT T1, T2 FROM 
(
SELECT sum(T1c) as T1 FROM
    (
    SELECT strftime('%H:%M',message_internaldate) AS T1s ,count(*) as T1c FROM messages WHERE
    message_internaldate BETWEEN '2005-01-01 00:00:00' AND '2012-12-31 00:00:00'
    AND strftime('%H:%M',message_internaldate) BETWEEN '01:00'AND '01:59'
    GROUP BY strftime('%H:%M',message_internaldate)
    )
)
,
(
SELECT sum(T2c) as T2 FROM
    (
    SELECT strftime('%H:%M',message_internaldate) AS T2s ,count(*) as T2c FROM messages WHERE
    message_internaldate BETWEEN '2005-01-01 00:00:00' AND '2012-12-31 00:00:00'
    AND strftime('%H:%M',message_internaldate) BETWEEN '02:00'AND '02:59'
    GROUP BY strftime('%H:%M',message_internaldate)
    )
)
...
4

1 に答える 1

1

あなたの問題は、個々の時間を列として持ちたいということです。

それらを行として取得するには、次のようなクエリを試してください。

SELECT strftime('%H', message_internaldate) AS hour,
       strftime('%H:%M', message_internaldate) AS Ts,
       COUNT(*) AS Tc
FROM messages
WHERE message_internaldate BETWEEN '2005-01-01 00:00:00' AND '2012-12-31 23:59:59'
GROUP BY 1, 2
于 2013-03-18T10:59:35.630 に答える