当值之间的差距大于 x 时如何计算出现次数
How to count occurrences when the gap between the values is greater than x
考虑一个带有 id 列和 int 列的简单 MySQL table,我需要计算 gap 等于或大于特定值。
假设该值为 10。
给定以下示例记录:
{1, 2, 3} = 1 time
{1, 2, 3, 4, 5, 6, 7, 8, 9} = 1 time;
{1, 2, 3, 14, 17} = 2 times (1, 2, 3 and 14, 17);
{1, 2, 3, 14, 20, 40, 42} = 3 times (1, 2, 3 and 14, 20 and 40, 42);
是否可以用 mysql 解决这个问题?
是的。对于 table t
列 id
和 num
这看起来像这样:
SET @n = 10;
SELECT 1 + SUM(COALESCE(t3.f, 0))
FROM (
SELECT DISTINCT t1.num, (
SELECT CASE WHEN t2.num - t1.num > @n THEN 1 ELSE 0 END
FROM t t2
WHERE t2.num > t1.num
ORDER BY num LIMIT 1
) AS f
FROM t t1
) t3
考虑一个带有 id 列和 int 列的简单 MySQL table,我需要计算 gap 等于或大于特定值。
假设该值为 10。
给定以下示例记录:
{1, 2, 3} = 1 time
{1, 2, 3, 4, 5, 6, 7, 8, 9} = 1 time;
{1, 2, 3, 14, 17} = 2 times (1, 2, 3 and 14, 17);
{1, 2, 3, 14, 20, 40, 42} = 3 times (1, 2, 3 and 14, 20 and 40, 42);
是否可以用 mysql 解决这个问题?
是的。对于 table t
列 id
和 num
这看起来像这样:
SET @n = 10;
SELECT 1 + SUM(COALESCE(t3.f, 0))
FROM (
SELECT DISTINCT t1.num, (
SELECT CASE WHEN t2.num - t1.num > @n THEN 1 ELSE 0 END
FROM t t2
WHERE t2.num > t1.num
ORDER BY num LIMIT 1
) AS f
FROM t t1
) t3