SQL - SQLite рассчитывать последовательные числа - PullRequest
1 голос
/ 30 октября 2009

У меня есть таблица со следующими данными:

id | numbers | date
----------------------------------
1  | -1-4-6- | 2009-10-26 15:30:20
2  | -1-4-7- | 2009-10-26 16:45:10
3  | -4-5-8- | 2009-10-27 11:21:34
4  | -2-6-7- | 2009-10-27 13:12:56
5  | -1-3-4- | 2009-10-28 14:22:14
6  | -1-2-4- | 2009-10-29 20:28:16
.  . ....... . ...................

В этом примере таблицы я использую запрос like для подсчета чисел, пример:

select count(*) from table where numbers like '%-4-%'
Result: 5

Теперь, как я могу посчитать (используя как), сколько раз число появляется последовательно (в данном случае число 4)? Я имею в виду: число 4 появляется последовательно с идентификаторами 1,2,3 и 5,6, поэтому я хочу получить запрос с результатом: 2.

1 Ответ

2 голосов
/ 30 октября 2009

Это должно сделать это.

create table "table" (id int, numbers text);
insert into "table" values (1, '-1-4-6-');
insert into "table" values (2, '-1-4-7-');
insert into "table" values (3, '-4-5-8-');
insert into "table" values (4, '-2-6-7-');
insert into "table" values (5, '-1-3-4-');
insert into "table" values (6, '-1-2-4-');

SELECT count(*) 
FROM (
    SELECT "table".*, temp1.id, temp2.id 
    FROM "table" 
    INNER JOIN "table" temp1
        ON "table".id = temp1.id+1 
    LEFT JOIN  (
        SELECT id FROM "table" WHERE numbers LIKE '%-4-%'
    ) temp2 ON temp1.id+1  = temp2.id+2 

    WHERE "table".numbers LIKE '%-4-%' 
      AND "temp1".numbers LIKE '%-4-%'
      AND temp2.id IS NULL
) consecutive_groups_gt_1

[[Редактировать: Добавлены тестовые данные и исправлено цитирование]]

[[Редактировать: изменен запрос, чтобы он учитывался только в тех случаях, когда есть группы строк, состоящие как минимум из 2 членов]]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...