2009-10-30 7 views
1

J'ai une table avec les données suivantes:SQL - comptage SQLite numéros consécutifs

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 
. . ....... . ................... 

Dans ce tableau d'exemple, j'utilise une requête like pour compter les nombres, par exemple:

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

Maintenant, comment puis-je compter (en utilisant comme) combien de fois un nombre apparaît consécutivement (dans ce cas le nombre 4)? Je veux dire: le nombre 4 apparaît consécutivement sur les ID 1,2,3 et 5,6 donc je veux obtenir une requête avec le résultat: 2.

+0

Et vous voulez aussi un hit sur id = 1,2,5,6 pour le cas où le nombre est 1? Devrait-il renvoyer 1,2 comme un «coup» séparé ou est 1,2,5,6 suffisante? – jcollum

Répondre

2

Cela devrait le faire.

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: les données de test et correction d'citant]]

[[Edit: Changé requête pour compter uniquement que si il y a des groupes de lignes avec au moins 2 membres]]

+0

Merci pour votre réponse Lance :) Votre solution est bonne, mais si j'exécute votre requête sur le numéro 5 (par exemple) il me donne le résultat 1 et non 0. Je veux dire que je veux compter uniquement des nombres consécutifs excluant un seul numéro. Un autre exemple: -1-3-5- | -2-4-6- | -1-3-7- | La requête de résultat pour le numéro 1 doit être 1 et non 2. Comment puis-je modifier votre requête pour le faire? Merci encore :) – Maiori

+0

ah .. ok exclure les numéros simples ... travailler dessus, –

+0

ok, merci beaucoup :) – Maiori