我有隔壁桌
产品 | 植物 | 商店 | 周 | 日期 | 库存 |
---|---|---|---|---|---|
123456 | A123 | Z12 | 0 | 2001-01-01 | -24 |
123456 | A123 | Z12 | 1 | 2001-01-08 | -60 |
123456 | A123 | Z12 | 2 | 2001-01-16 | -60 |
789123 | B345 | 123 | 0 | 2001-01-01 | 10 |
789123 | B345 | 123 | 1 | 2001-01-08 | -20 |
789123 | B345 | 123 | 2 | 2001-01-16 | -30 |
013579 | C678 | 1A3 | 0 | 2001-01-01 | 10 |
013579 | C678 | 1A3 | 1 | 2001-01-08 | 20 |
013579 | C678 | 1A3 | 2 | 2001-01-16 | 30 |
所以我想获取第一个负值,然后获取其日期,并在第一个日期(周=0)和第一个负值的日期之间进行减法,但如果不是负值,则获取最后一个正值,并在第一个日期(位于“周”列中且值=0)和最后一个日期(位于“周”列中且值=2)之间进行减法。所以最后我会得到一个像这样的表:
产品 | 植物 | 商店 | 天差 |
---|---|---|---|
123456 | A123 | Z12 | 0 |
789123 | B345 | 123 | 7 |
013579 | C678 | 1A3 | 15 |
DaysDiff 列中的结果是由于
(2001-01-01)-(2001-01-01)=0
、(2001-01-01)-(2001-01-08)=7
和 (2001-01-01)-(2001-01-16)=15
。
我写的查询是这样的:
SELECT
Product,
Plant,
Store,
CASE
WHEN MIN(CASE WHEN Stock < 0 THEN Date END) IS NOT NULL THEN
DATEDIFF(WEEK,
MIN(CASE WHEN Stock < 0 THEN Date END),
MIN(CASE WHEN Week = 0 THEN Date END)
)
ELSE
DATEDIFF(WEEK,
MAX(CASE WHEN Week = 0 THEN Date END),
MIN(Date)
)
END AS DaysDiff
FROM Table
GROUP BY
Product,
Plant,
Store
ORDER BY Product, Plant, Store;
但我只得到一个结果。
产品 | 植物 | 商店 | 天差 |
---|---|---|---|
123456 | A123 | Z12 | 0 |
有什么帮助吗?