Mysql
 sql >> Baza danych >  >> RDS >> Mysql

SQL Dołącz do tej samej tabeli na podstawie znacznika czasu i poziomu zapasów

Tłumaczenie na SQL nie jest takie trudne, ale wydajność może być zła. Dzięki temu otrzymasz sygnaturę czasową, kiedy produkt był ponownie w magazynie:

SELECT inv.*,
 ( SELECT MIN(`inv2`.`in_stock_at`)
   FROM inventories AS inv2
   WHERE inv2.`product_id` = inv.`product_id`   -- same product
     AND inv2.`pusher_id` = `inv`.`pusher_id`   -- same pusher
     AND `inv2`.`created_at` > inv.`created_at` -- later timestamp
     AND `inv2`.`item_count` > 0                -- in stock
 ) AS inStockAgain_at
from `inventories` AS inv
WHERE inv.`item_count` <= 0   -- out of stock
 -- AND inv.`product_id`=9

Edycja:

Usuwanie kolejnych rzędów z zerowym zapasem jest bardziej skomplikowane:

SELECT inv.*, dt.inStockAgain_at
FROM inventories AS inv
JOIN
 ( 
   SELECT product_id, pusher_id, 
      MIN(created_at) AS min_created_at,
     inStockAgain_at
   FROM
    (
      SELECT product_id, pusher_id, created_at,
       ( SELECT MIN(inv2.created_at)
         FROM inventories AS inv2
         WHERE inv2.product_id = inv.product_id -- same product
           AND inv2.pusher_id = inv.pusher_id   -- same pusher
           AND inv2.created_at > inv.created_at -- later timestamp
           AND inv2.item_count > 0              -- in stock
       ) AS inStockAgain_at
      FROM inventories AS inv
      WHERE inv.item_count <= 0  
    ) AS dt
   GROUP BY product_id, pusher_id, inStockAgain_at
 ) AS dt
ON inv.product_id = dt.product_id
AND inv.pusher_id = dt.pusher_id 
AND inv.created_at = dt.min_created_at 

Zobacz skrzypce




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd importu MySQLdb i Pythona

  2. MySQL:Znajdowanie wierszy, które nie biorą udziału w relacji

  3. Jak usunąć ograniczenia z mojej tabeli MySQL?

  4. Moduł Node.js MySQL - rzucaj błąd; // Ponowne zgłoszenie błędów innych niż MySQL;

  5. sql:wybierz najczęściej głosowane elementy od każdego użytkownika