2012-05-23 85 views
4

這過於簡單了這個問題的目的,但假設我有一個INVENTORY表具有以下欄目:SKUDATEQUANTITY。我想要選擇所有列中前一天的QUANTITY小於QUANTITY的任何一天。你如何在同一個表上寫一個SELECT查詢和一個子SELECTMySQL的子選擇同一個表

或者,如果有人知道該怎麼稱呼這種查詢,那麼我可以對自己做更多的研究,這將有所幫助。 (即,這是一個遞歸查詢嗎?)

+0

結果集是空的,因爲數量不能低於最低一組的是一員...... –

+0

@KeithRandall的 - 爲什麼不呢?如果我昨天賣掉零個電話,但在此之前的每一天都有10個電話,那麼這是他想要選擇的最小數量。 – BeemerGuy

+0

@beemerGuy.net:我很迂腐,但是如果你一天售出10部手機,另一部手機是0,那麼任何一天*的最小數量爲0.我的評論有些玩笑,因爲OP打算說「前一天前的任何一天」,而不是「任何一天」(包括前一天)。 –

回答

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 
         ) 
+0

這很有幫助,我沒想過要使用表別名。我不確定你是否願意糾正這一點,但我需要sku,數量和日期,前一天的數量較少。 – psyklopz

+0

等....你想比較它** **前一天**?或**任何**前一天? @KeithRandall畢竟值得信任,因爲它是迂腐=) – BeemerGuy

+0

我發現這樣的查詢需要很長時間才能執行(在我的情況下> 11秒)。任何方式使其更快? – JBS

0

你可以加入一個表,以自己的這種事情。確切的語法可能不適合日期數學,如果你每天有多個記錄,你可能想要做一些分組,但是我希望你明白。

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