SELECT te.* FROM tableName as te WHERE te.Mobile_Number <> (select Mobile_Number from tableName where createDate > te.createDate limit 1 ) ORDER BY te.createDate DESC
3 Réponses :
UTILISER LE GROUPE PAR
SELECT te.* FROM tableName as te where te.Mobile_Number != (select Mobile_Number from tableName where createDate > te.createDate limit 1) GROUP BY Mobile_Number ORDER BY te.createDate DESC
grouper en combinant tous les mêmes enregistrements Mobile_Number que je veux combiner s'il y a le prochain est le même que par date, veuillez voir la question et l'exemple que je fournis. Merci @Ram
Ok, c'est le problème des lacunes et des îles. Si votre Sqlite prend en charge la fonction row_number
(version 3.25 et plus), vous pouvez utiliser l'approche suivante
select MobileNumber, max(createDate), count(*) from ( select *, row_number() over (order by createDate) - row_number() over (partition by MobileNumber order by createDate) grp from data ) t group by grp, MobileNumber
il y a une erreur avec votre requête près de "(" pouvez-vous exécuter une requête?
Je n'ai testé que sur PostgreSQL, cependant, cela devrait fonctionner si votre sqlite prend en charge row_number
. Pouvez-vous essayer d'exécuter uniquement la sous-requête t
et me le faire savoir?
Il s'agit d'un problème de lacunes et d'îles. Une solution consiste à attribuer un "grp" à chaque ligne, puis à les agréger par ce groupe.
Vous pouvez attribuer le groupe en comptant le nombre de numéros de mobile qui sont différents du numéro de mobile dans chaque rangée, jusqu'à cette rangée. Il s'agit d'une valeur constante pour les numéros de mobile adjacents.
La requête résultante:
SELECT MAX(UniqueId), MobileNumber, MAX(createDate), COUNT(*) FROM (SELECT te.*, (SELECT COUNT(*) FROM tableName te2 WHERE te2.createDate < te.createDate AND te2.MobileNumber <> te.MobileNumber ) as grp FROM tableName te ) te GROUP BY MobileNumber, grp; ORDER BY MIN(tcreateDate) DESC
son mysql ou sqlite? ce sont des SGBD différents. S'il s'agit d'un mysql, écrivez la version que vous utilisez. J'ai changé les balises.
@ RadimBača est SQLITE
et quelle version de sqlite? avez-vous 3,25 ou plus?
Les requêtes sont nécessaires pour la base de données Android SQLITE alors peut-être que ce ne sont pas des versions d'effet.
pouvez-vous tester
select row_number () over (order by createdate) from tablename
query dans votre base de données?Je ne sais pas comment j'ai utilisé row_number () selon ma table.
Ce n'est pas simple. Le row_number fonctionne pour vous? Je veux dire que le row_number est pris en charge?
oui row_number pris en charge sqlite