在 postgresql table, sql 中查找最大条目
Finding max entries in postgresql table, sql
我有一个 table 有几百万个条目。我想找出一年(2018)中给定分钟内出现的最大条目数。
我最初的策略是找出哪个月份的条目数最多。像这样:
--月份
SELECT date_part('month', create_time), count(*)
FROM mydb.mytable
WHERE date_part('year', create_time) = 2018
GROUP BY date_part('month', create_time)
然后这将给我一年中的某个月份最大。我会继续处理日、小时和月,并最终以例如:
结束
--分钟
SELECT date_part('minute', create_time), count(*)
FROM mydb.mytable
WHERE date_part('year', create_time) = 2018
AND date_part('month', create_time) = 6
AND date_part('day', create_time) = 19
AND date_part('hour', create_time) = 11
GROUP BY date_part('minute', create_time)
ORDER BY count DESC
通过这种策略,我发现每分钟的最大条目数将是例如250.
然而事实证明这是一个错误的策略。
巧合的是,我发现每月进入次数明显减少的月份之一实际上每分钟进入率更高,例如700.
所以问题是,我怎样才能找到一年中每分钟的最大条目数,而不必 "probe" 我自己想办法?
将时间截断为分钟,以此为基础进行分组,然后计数:
SELECT
date_trunc('minute', create_time),
count(*)
FROM mydb.mytable
GROUP BY 1
ORDER BY 2 DESC
我有一个 table 有几百万个条目。我想找出一年(2018)中给定分钟内出现的最大条目数。
我最初的策略是找出哪个月份的条目数最多。像这样:
--月份
SELECT date_part('month', create_time), count(*)
FROM mydb.mytable
WHERE date_part('year', create_time) = 2018
GROUP BY date_part('month', create_time)
然后这将给我一年中的某个月份最大。我会继续处理日、小时和月,并最终以例如:
结束--分钟
SELECT date_part('minute', create_time), count(*)
FROM mydb.mytable
WHERE date_part('year', create_time) = 2018
AND date_part('month', create_time) = 6
AND date_part('day', create_time) = 19
AND date_part('hour', create_time) = 11
GROUP BY date_part('minute', create_time)
ORDER BY count DESC
通过这种策略,我发现每分钟的最大条目数将是例如250.
然而事实证明这是一个错误的策略。
巧合的是,我发现每月进入次数明显减少的月份之一实际上每分钟进入率更高,例如700.
所以问题是,我怎样才能找到一年中每分钟的最大条目数,而不必 "probe" 我自己想办法?
将时间截断为分钟,以此为基础进行分组,然后计数:
SELECT
date_trunc('minute', create_time),
count(*)
FROM mydb.mytable
GROUP BY 1
ORDER BY 2 DESC