Cómo quitar filas consecutivas con datos duplicados en ciertos campos (en SQLite)?

Digamos, por ejemplo, que tiene una tabla como esta:

------------------------------- Date Name Type 2017-01-01 John 1 2017-01-02 John 1 2017-01-03 Mike 2 2017-01-04 John 1 ------------------------------- 

Quiero ser capaz de agrupar por el tipo para obtener un resultado como el siguiente

 ------------------------- Name Type John 1 Mike 2 John 1 ------------------------- 

Como se puede ver las dos primeras filas se agruparon porque no hay ningún tipo diferente entre ellos, como lo que se ve en los registros de llamadas de teléfonos móviles.

¿Cómo puedo lograr eso en SQLite?

Puede hacer esto con una tabla de temp ordenada y algunas comparaciones rowid:

 sqlite> create table t (date, name, type); sqlite> insert into t (date, name, type) values ( '2017-01-01', 'John', 1); sqlite> insert into t (date, name, type) values ( '2017-01-02', 'John', 1); sqlite> insert into t (date, name, type) values ( '2017-01-03', 'Mike', 2); sqlite> insert into t (date, name, type) values ( '2017-01-04', 'John', 1); sqlite> create temp table tp as select date, name, type from t order by date; sqlite> delete from tp where tp.name = (select name from t where t.rowid = tp.rowid - 1) and tp.type = (select type from t where t.rowid = tp.rowid - 1); sqlite> select * from tp; 2017-01-01|John|1 2017-01-03|Mike|2 2017-01-04|John|1 sqlite> 

La consulta siguiente logra esto por un NOT EXISTS para los mismos valores de Name y Type en la fila anterior (si existe). La fila anterior se encuentra buscando la fecha máxima que es estrictamente inferior a la fecha de la fila actual.

 SELECT * FROM tbl t1 WHERE NOT EXISTS ( SELECT * FROM tbl t2 WHERE t2.Name = t1.Name AND t2.Type = t1.Type AND t2.`Date` = (SELECT MAX(`Date`) FROM tbl t3 WHERE t3.`Date` < t1.`Date`) ); 

Demostración de SQL Fiddle: http://sqlfiddle.com/#!5/0700cb/3

  • ¿Cómo agregar y utilizar la extensión de carga de Sqlite en android?
  • No se pueden actualizar varias filas en el comando de actualización de la base de datos Sqlite en android
  • ¿Soporta la plataforma Android SpatiaLite?
  • SQLite Database: SQLiteDiskIOException: error de E / S de disco (código 1802)
  • Cómo ver la base de datos de aplicación de Android que se ejecuta en mi teléfono
  • SQLite Android: parámetro nullColumnHack en los métodos insert / replace
  • Insertar null en la tabla Sqlite
  • Android: ¿Qué tan segura es la base de datos con la aplicación
  • Intel XDK: Conexión de la aplicación móvil a una base de datos
  • Cómo utilizar join consulta en CursorLoader cuando su constructor no lo admite
  • Abra cualquier SQLiteDatabase como su / root
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.