Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

[sql] limitar registros, calculo y ordenar

Estas en el tema de [sql] limitar registros, calculo y ordenar en el foro de Bases de Datos General en Foros del Web. Buenos días a tod@s :) antes de nada agradeceros la ayuda de antemano, Veréis, estoy creando un sistema informático para un familiar que tiene un ...
  #1 (permalink)  
Antiguo 05/08/2017, 04:18
 
Fecha de Ingreso: abril-2010
Mensajes: 267
Antigüedad: 14 años
Puntos: 1
[sql] limitar registros, calculo y ordenar

Buenos días a tod@s :) antes de nada agradeceros la ayuda de antemano,

Veréis, estoy creando un sistema informático para un familiar que tiene un ganado, básicamente al grano: ellos cuando se ordeña y tal se inserta en una tabla llamada `liters` los siguientes datos: `id`, `bolu`, `time`, `liters`, `user_id`

* Liters se guarda en Timestamp.

Cada id identifica la fila, mientras que bolu es el microchip del animal que se puede repetir, el tiempo el momento del registro y liters los litros. Lo que quiero hacer es una consulta SQL que me calcule el progreso en porcentaje del último registro con respecto el penúltimo de cada microchip y me lo ordene de forma descendente según el porcentaje.

Agradezco la ayuda :)

Tengo una sentencia que hice ayer que lo que hace es básicamente sumar todos los litros de cada oveja y ordenar de forma descendente, es algo que en parte se le asemeja a la forma, lo dejo por si sirviese de algo:

Código:
SELECT `bolu`, SUM(liters) AS `liters` FROM `liters` GROUP BY `bolu` ORDER BY `liters` DESC LIMIT 10
  #2 (permalink)  
Antiguo 05/08/2017, 11:47
Avatar de hackjose  
Fecha de Ingreso: abril-2010
Ubicación: Edo Mexico
Mensajes: 1.178
Antigüedad: 14 años
Puntos: 131
Respuesta: [sql] limitar registros, calculo y ordenar

Debes eplicarte mejor

Como se calcula el progreso de un microchip?

Saludos
  #3 (permalink)  
Antiguo 05/08/2017, 12:43
 
Fecha de Ingreso: abril-2010
Mensajes: 267
Antigüedad: 14 años
Puntos: 1
Respuesta: [sql] limitar registros, calculo y ordenar

Jaja sí a veces me explico algo mal, lo que yo quiero es, tengo esa tabla, adjunto el código sql para la tabla y información:

Código SQL:
Ver original
  1. -- phpMyAdmin SQL Dump
  2. -- version 4.6.5.2
  3. -- https://www.phpmyadmin.net/
  4. --
  5. -- Servidor: 127.0.0.1
  6. -- Tiempo de generación: 05-08-2017 a las 20:40:03
  7. -- Versión del servidor: 10.1.21-MariaDB
  8. -- Versión de PHP: 7.1.1
  9.  
  10. SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
  11. SET time_zone = "+00:00";
  12.  
  13.  
  14. /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
  15. /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
  16. /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
  17. /*!40101 SET NAMES utf8mb4 */;
  18.  
  19. --
  20. -- Base de datos: `sheeps_control`
  21. --
  22.  
  23. -- --------------------------------------------------------
  24.  
  25. --
  26. -- Estructura de tabla para la tabla `liters`
  27. --
  28.  
  29. CREATE TABLE `liters` (
  30.   `id` INT(11) NOT NULL,
  31.   `bolu` text,
  32.   `time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  33.   `liters` INT(11) NOT NULL DEFAULT '0',
  34.   `user_id` INT(11) NOT NULL DEFAULT '0'
  35. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT;
  36.  
  37. --
  38. -- Volcado de datos para la tabla `liters`
  39. --
  40.  
  41. INSERT INTO `liters` (`id`, `bolu`, `time`, `liters`, `user_id`) VALUES
  42. (1, 'A1', '2017-08-05 09:26:41', 20, 0),
  43. (2, 'A2', '2017-08-05 09:26:50', 50, 0),
  44. (3, 'A1', '2017-08-05 09:26:58', 10, 0),
  45. (4, 'A1', '2017-08-04 09:45:44', 13, 0),
  46. (5, 'A2', '2017-08-05 22:00:00', 50, 0);
  47.  
  48. --
  49. -- Índices para tablas volcadas
  50. --
  51.  
  52. --
  53. -- Indices de la tabla `liters`
  54. --
  55. ALTER TABLE `liters`
  56.   ADD PRIMARY KEY (`id`);
  57.  
  58. --
  59. -- AUTO_INCREMENT de las tablas volcadas
  60. --
  61.  
  62. --
  63. -- AUTO_INCREMENT de la tabla `liters`
  64. --
  65. ALTER TABLE `liters`
  66.   MODIFY `id` INT(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=6;
  67. /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
  68. /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
  69. /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

Bien, yo lo que quiero es que sólo se calcule para el mismo "bolu", es decir, por ejemplo el A1, que sólo cuente los dos últimos registros más recientes, es decir, el del día 4 se quedaría fuera ya, y de esos dos últimos registros haga una regla de tres con los litros: LITROS DEL DÍA MÁS RECIENTE * 100 / LITROS DEL OTRO DÍA, y que deje 2 decimales, una vez hecho eso con cada "bolu", lo ordene por el resultado que nos ha dado cada uno de forma decreciente.

Creo que ahora me he explicado un poco mejor XD, básicamente lo que tendré es un ranking del que mejor ha progresado o se ha superado del registro anterior. Así ver como van progresando.

Mil gracias :)

Última edición por alejandromaringomez; 05/08/2017 a las 12:44 Razón: Intento de que no muestre de golpe el código SQL

Etiquetas: calculo, insert, limitar, registros, select, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:09.