Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

SQL टाइम स्टैम्प और इन्वेंट्री स्तर के आधार पर समान तालिका में शामिल हों

SQL में अनुवाद करना उतना कठिन नहीं है, लेकिन प्रदर्शन खराब हो सकता है। जब उत्पाद वापस स्टॉक में था तब यह आपको टाइमस्टैम्प प्राप्त करेगा:

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

संपादित करें:

शून्य स्टॉक वाली लगातार पंक्तियों को हटाना अधिक जटिल है:

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 

देखें fiddle




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. सम्मिलित नहीं चला सकते और उसी क्वेरी में LAST_INSERT_ID () का चयन करें?

  2. वर्ग नहीं मिला अपवाद com.mysql.jdbc.driver

  3. जेपीए OneToMany/ManyToOne संबंध काम नहीं कर रहा - मुझे क्या याद आ रहा है?

  4. जॉइन स्टेटमेंट mysql के साथ अपडेट करें?

  5. एकाधिक चेकबॉक्स स्थिति के आधार पर SQL क्वेरी की संरचना करना