我有隔壁桌
产品 | 植物 | 商店 | 文字 | 周 | 日期 | 库存 |
---|---|---|---|---|---|---|
123456 | A123 | Z12 | 你好世界 | 1 | 2001-01-01 | 20 |
123456 | A123 | Z12 | 你好世界 | 2 | 2001-01-08 | -15 |
123456 | A123 | Z12 | 你好世界 | 3 | 2001-01-16 | -20 |
789123 | B345 | 123 | 你好世界1 | 1 | 2001-01-01 | 10 |
789123 | B345 | 123 | 你好世界1 | 2 | 2001-01-08 | 20 |
789123 | B345 | 123 | 你好世界1 | 3 | 2001-01-16 | 30 |
所以我想获取第一个负值的行,但如果不是负值,则获取最后一个正值。还像这样重组了表格。
产品 | 植物 | 商店 | 文字 | 开始日期 | 库存开始 | 日期_完成 | 库存_已完成 |
---|---|---|---|---|---|---|---|
123456 | A123 | Z12 | 你好世界 | 2001-01-01 | 20 | 2001-01-08 | -15 |
789123 | B345 | 123 | 你好世界1 | 2001-01-01 | 10 | 2001-01-16 | 30 |
我尝试了多个查询,但结果最接近的一个如下:
SELECT Product,Plant,Store,Text,Date, Stock FROM table
WHERE (Stock)<0
order by Product,Plant,Store,Text,Date, Stock asc
我也尝试使用
FETCH FIRST 1 ROWS ONLY
,但我收到了下一个错误ERROR: Syntax error at or near "FIRST"
。
另一个查询如下:
WITH added_row_number AS (
SELECT
*,
ROW_NUMBER() OVER(PARTITION BY Product,Plant,Store ORDER BY Date ASC) AS row_number
FROM MM_STOCK
)
SELECT
*
FROM added_row_number
WHERE (Stock)<0 AND row_number = 1;
但是要注意数据,如果我添加案例陈述,我会收到错误
ERROR: Syntax error at or near "CASE"
。有什么帮助吗?
可以使用一些子选择来解决这个问题
SELECT "Product", "Plant", "Store"
, (SELECT "Date" FROM Table2 t2 WHERE t1."Product" = t2."Product" AND t1."Plant" = t2."Plant"
AND t1."Store" = t2."Store" ORDER BY "Week" ASC LIMIT 1) start_date
, (SELECT "Stock" FROM Table2 t2 WHERE t1."Product" = t2."Product" AND t1."Plant" = t2."Plant"
AND t1."Store" = t2."Store" ORDER BY "Week" ASC LIMIT 1) start_stock
, (SELECT "Date" FROM Table2 t2 WHERE t1."Product" = t2."Product" AND t1."Plant" = t2."Plant"
AND t1."Store" = t2."Store" ORDER BY "Week" DESC LIMIT 1) en_date
, (SELECT "Stock" FROM Table2 t2 WHERE t1."Product" = t2."Product" AND t1."Plant" = t2."Plant"
AND t1."Store" = t2."Store" ORDER BY "Week" DESC LIMIT 1) end_stock
FROM
Table2 t1
GROUP BY
"Product", "Plant", "Store"
产品 | 植物 | 商店 | 开始日期 | 起始库存 | en_日期 | 最终库存 |
---|---|---|---|---|---|---|
789123 | B345 | 123 | 2001-01-01 | 10 | 2001-01-16 | 30 |
123456 | A123 | Z12 | 2001-01-01 | 20 | 2001-01-16 | -20 |
SELECT 2
你不需要这个聚合,我找不到不起作用的版本 postgres
SELECT DISTINCT "Product", "Plant", "Store"
, (SELECT "Date" FROM Table2 t2 WHERE t1."Product" = t2."Product" AND t1."Plant" = t2."Plant"
AND t1."Store" = t2."Store" ORDER BY "Week" ASC LIMIT 1) start_date
, (SELECT "Stock" FROM Table2 t2 WHERE t1."Product" = t2."Product" AND t1."Plant" = t2."Plant"
AND t1."Store" = t2."Store" ORDER BY "Week" ASC LIMIT 1) start_stock
, (SELECT "Date" FROM Table2 t2 WHERE t1."Product" = t2."Product" AND t1."Plant" = t2."Plant"
AND t1."Store" = t2."Store" ORDER BY "Week" DESC LIMIT 1) en_date
, (SELECT "Stock" FROM Table2 t2 WHERE t1."Product" = t2."Product" AND t1."Plant" = t2."Plant"
AND t1."Store" = t2."Store" ORDER BY "Week" DESC LIMIT 1) end_stock
FROM
Table2 t1
产品 | 植物 | 商店 | 开始日期 | 起始库存 | en_日期 | 最终库存 |
---|---|---|---|---|---|---|
123456 | A123 | Z12 | 2001-01-01 | 20 | 2001-01-16 | -20 |
789123 | B345 | 123 | 2001-01-01 | 10 | 2001-01-16 | 30 |
SELECT 2