我正在创建一个多租户应用程序,对于特定事件,当用户触发时,我将事件开始时间保存在数据库中(SQLite)。为了确定峰值请求时间,我试图找到保存的时间戳的mode。不要与平均值相混淆,平均值将给出我所有时间戳的平均值 - 我正在寻找一种方法来找到反映峰值的结果范围。例如 - 下午2点至下午4点之间,大多数事件都被解雇了。时间戳以YYYY-MM-DDTHH:NN:SS格式存储为字符串值。
我在写下一个有助于解决此问题的查询时遇到了问题。
答案 0 :(得分:1)
算法应如下:
以下是一个示例查询,使用该查询可以在范围持续时间为1小时时完成时间戳的查找模式:
SELECT Range AS RangeStart, Range+1 AS RangeEnd FROM
(
SELECT STRFTIME('%H',starttime) AS Range, COUNT(*) As cnt FROM Events
GROUP BY STRFTIME('%H',starttime)
)
ORDER BY cnt DESC
LIMIT 1;
您可以在SQL Fiddle
查看代码如果它解决了您的问题,请告诉我。
答案 1 :(得分:1)
在SQLite
中,您可以使用类似此查询的内容来获得DATETIME
的中位数:
SELECT DATETIME(CAST(AVG(CAST(strftime("%s",T) as int)) AS TEXT),'unixepoch') median FROM
(SELECT TEST T FROM TABLE1 ORDER BY TEST
LIMIT 2 - (SELECT COUNT(*) FROM TABLE1) % 2
OFFSET ((SELECT COUNT(*) FROM TABLE1) / 2) -
(1 - (SELECT COUNT(*) FROM TABLE1) % 2))T2;
答案 2 :(得分:1)
这是我为解决问题所做的工作: -
我创建了另一个列,它只存储了时间戳的小时。
执行以下查询。
SELECT EventHour,COUNT(*)AS CountOfHours FROM EventTable GROUP BY EventHour 订购CountOfHours DESC 限制1
这给出了事件的峰值交通时间范围