MySQL来自同一个表的子SELECT

时间:2012-05-23 01:29:49

标签: mysql

对于此问题,这是过于简化的,但假设我有一个INVENTORY表,其中包含以下列:SKUDATEQUANTITY。我想选择前一天的QUANTITY小于QUANTITY任何一天的所有列。如何在同一个表上用子SELECT编写SELECT查询?

或者,如果有人知道该怎么称呼这种查询,那么我可以自己做更多的研究,这会有所帮助。 (即,这是一个递归查询吗?)

2 个答案:

答案 0 :(得分:2)

我认为这对你来说是个好开始(如果我理解你的架构正确的话) 在英语中,这将选择昨天的数量小于同一SKU所有前几天的最小数量的所有SKU。

SELECT 
    SKU, 
    Quantity

FROM 
    INVENTORY inv

WHERE
    inv.DATE = GETDATE() - 1
    AND inv.QUANTITY < (SELECT MIN(prev_inv.QUANTITY) 
                        FROM INVENTORY prev_inv
                        WHERE 
                            prev_inv.DATE < GETDATE() - 1 
                            AND prev_inv.SKU = inv.SKU
                       )

答案 1 :(得分:0)

你可以为这种事情加入一个表。确切的语法可能不适合日期数学,如果你每天有多个记录,你可能想要做一些GROUPing,但我希望你能理解。

SELECT i1.*
FROM INVENTORY AS i1
JOIN INVENTORY AS i2 ON i2.DATE = i1.DATE + 1
WHERE i1.QUANTITY > i2.QUANTITY