MYSQL - Получить значения из последнего идентификатора в группе по запросу - PullRequest
1 голос
/ 23 марта 2020

Полный пример в SQL Fiddle У меня есть запрос из 3 таблиц

SELECT MAX(s.id_stock), s.precio_in, s.codigo, 
   SUM(s.cantidad) - COALESCE(sv.suma_salidas,0) as cantidad, 
   x.status
    FROM db1_stock s
    LEFT JOIN 
      (SELECT COALESCE(sum(cant_ser),0) suma_salidas, codigo
       FROM db1_servicios
       GROUP BY codigo) sv USING (codigo)       
    LEFT JOIN db1_oc x
        ON (s.oc_id = x.oc_id)
    WHERE x.status = 'EN BODEGA'
    GROUP BY s.codigo
    ORDER BY x.fecha_oc DESC

Таблицы (db1_services пусто)

enter image description here enter image description here

Результат enter image description here

Я ожидаю того же результата, но от последнего id_stock, без потерь сумма и группировка по codigo; не максимальное значение precio_in, только самое последнее. Спасибо !! FIDDLE

Ответы [ 2 ]

1 голос
/ 23 марта 2020

Чтобы получить последнее значение precio_in (я предполагаю, что имеется в виду значение, связанное с MAX(id_stock)), вам нужно выполнить агрегацию для db1_stock в производной таблице, а затем JOIN для значения db1_stock:

SELECT s.id_stock, 
       s.precio_in, 
       s.codigo, 
       a.cantidad - COALESCE(sv.suma_salidas,0) as cantidad, 
       x.status
FROM db1_stock s
JOIN (
  SELECT codigo,
         MAX(id_stock) AS id_stock,
         SUM(cantidad) AS cantidad
  FROM db1_stock
  GROUP BY codigo
) a ON a.codigo = s.codigo AND a.id_stock = s.id_stock
LEFT JOIN (
  SELECT COALESCE(SUM(cant_ser),0) AS suma_salidas, codigo
  FROM db1_servicios
  GROUP BY codigo
) sv ON sv.codigo = s.codigo
JOIN db1_oc x ON s.oc_id = x.oc_id
WHERE x.status = 'EN BODEGA'
ORDER BY x.fecha_oc DESC

Вывод:

id_stock    precio_in   codigo      cantidad    status
19          4000        PRUEBA      6           EN BODEGA
20          4200        PRUEBA2     1           EN BODEGA

Демонстрация по SQLFiddle

0 голосов
/ 23 марта 2020

Обратите внимание на следующее и обратите внимание, что изображение не видно.

     SELECT x.id_stock 
          , x.codigo  
          , x.precio_in
          , x.cantidad 
          , o.status    
       FROM db1_stock x 
       JOIN db1_oc o
         ON o.oc_id = x.oc_id 
       JOIN 
          ( SELECT codigo
                 , MAX(id_stock) id_stock 
              FROM db1_stock 
             GROUP 
                BY codigo
          ) y 
         ON y.codigo = x.codigo 
        AND y.id_stock = x.id_stock;
+----------+---------+-----------+----------+-----------+
| id_stock | codigo  | precio_in | cantidad | status    |
+----------+---------+-----------+----------+-----------+
|       19 | PRUEBA  |      4000 |        3 | EN BODEGA |
|       20 | PRUEBA2 |      4200 |        1 | EN BODEGA |
+----------+---------+-----------+----------+-----------+
...