0

我需要检索一个序列列表,其中包含一个特定序列的数字的最少 N 次出现(顺序无关紧要)。

例如:

在我的 dbtable 中,我在 5 个整数列中有 3 个序列(行)。范围从 0 到 99:

C1 C2 C3 C4 C5
-- -- -- -- --
 1 56 10 58 70
 6  8  7 50 87
91 78 15 56 01

我有一个由 5 个数字组成的特定整数序列,例如:

 1 10 56 78 12

如果我询问数据库中包含最少 2 次出现的序列,我应该收到:

 1 56 10 58 70 (1,56,10 coincided)
91 78 15 56  1 (1,56 coincided)

如果我询问数据库中包含最少 3 次出现的序列,我将收到:

 1 56 10 58 70 (1,56,10 coincided)

我需要一个 SQL 查询,有人可以帮助我吗?

4

2 回答 2

1

类似于 Jan Doggen 的想法,但字符串不是必需的,因为值可以直接与IN进行比较。布尔表达式(如x IN (...))的结果是 0 或 1,因此可以直接求和:

SELECT *
FROM WhateverThatSuperSecretTableNameIs
WHERE ( 1 IN (C1, C2, C3, C4, C5)) +
      (10 IN (C1, C2, C3, C4, C5)) +
      (56 IN (C1, C2, C3, C4, C5)) +
      (78 IN (C1, C2, C3, C4, C5)) +
      (12 IN (C1, C2, C3, C4, C5))   >= 2
于 2013-08-13T15:18:05.733 回答
0

伪代码,因为我没有 SQLite 专业知识来快速编写完整的 SQL 语句

1)
首先转换为14位字符串:
select inttostr(c1)+' '+inttostr(c2)+' '+inttostr(c3)+' '+inttostr(c4)+' '+inttostr(c5) as strvalue from dbtable
(所以 inttostr 应该是一个两位数的字符串:0 -> '00')

对 (5) 搜索整数 i1..i5 执行相同操作

2)
从该集合中,选择(position of i1 in strvalue) mod 3- 找到 i1 时为 1

3)
您可以将这 5 个“位置”相加,并且总和必须 >= N

于 2013-08-13T15:02:10.970 回答