2009-10-30 2 views
1

У меня есть таблица со следующими данными:SQL - SQLite подсчета последовательных чисел

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 появляется последовательно на id 1,2,3 и 5,6, поэтому я хочу получить запрос с результатом: 2.

+0

и вы также хотите получить удар по id = 1,2,5,6 для случая, когда число равно 1? Нужно ли возвращать 1,2 в виде отдельного «хита» или 1,2,5,6? – jcollum

ответ

2

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

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 

[[Edit: Добавлены тестовые данные и скорректированный цитирование]]

[[Edit: Измененный запрос на счет только лишь там, где есть группы рядов, по крайней мере, 2 членов]]

+0

Спасибо за ваш ответ Lance :) Ваше решение хорошее, но если я выполню ваш запрос на номер 5 (например), он даст мне результат 1, а не 0. Я имею в виду, что я хочу считать только последовательные номера, за исключением одного номера. Другой пример: -1-3-5- | -2-4-6- | -1-3-7- | -1-4-6- Запрос результата для числа 1 должен быть 1, а не 2. Как я могу изменить ваш запрос для этого? Еще раз спасибо :) – Maiori

+0

ах .. ok исключить одиночные числа ... работая над ним, –

+0

хорошо, спасибо вам большое :) – Maiori

Смежные вопросы