出于这个问题的目的,这被过度简化了,但假设我有一个INVENTORY
包含以下列的表:SKU
, DATE
, QUANTITY
。我想选择QUANTITY
前一天的所有列小于QUANTITY
任何一天的列。如何在同一张表上编写SELECT
带有子查询的查询SELECT
?
或者,如果有人知道如何称呼这种查询,那么我可以自己做更多的研究,这会很有帮助。(即,这是一个递归查询吗?)
出于这个问题的目的,这被过度简化了,但假设我有一个INVENTORY
包含以下列的表:SKU
, DATE
, QUANTITY
。我想选择QUANTITY
前一天的所有列小于QUANTITY
任何一天的列。如何在同一张表上编写SELECT
带有子查询的查询SELECT
?
或者,如果有人知道如何称呼这种查询,那么我可以自己做更多的研究,这会很有帮助。(即,这是一个递归查询吗?)
我认为这对您来说是一个好的开始(如果我正确理解您的架构)。
在英语中,这将选择昨天数量少于同一 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
)
你可以将一个表加入到它的自身中来做这种事情。确切的语法可能不适合日期数学,如果您每天有多个记录,您可能想要进行一些 GROUPing,但我希望您明白这一点。
SELECT i1.*
FROM INVENTORY AS i1
JOIN INVENTORY AS i2 ON i2.DATE = i1.DATE + 1
WHERE i1.QUANTITY > i2.QUANTITY