itsource

쿼리 결과에서 실제 날짜에 이전 날짜의 값 추가

mycopycode 2023. 8. 15. 11:05
반응형

쿼리 결과에서 실제 날짜에 이전 날짜의 값 추가

DB-Fiddle:

CREATE TABLE logistics (
    id int auto_increment primary key,
    flow_date DATE,
    flow_type VARCHAR(255),
    flow_quantity INT
);

INSERT INTO logistics
(flow_date, flow_type, flow_quantity
)
VALUES 
("2020-04-18", "inbound", "500"),
("2020-04-18", "outbound", "400"),
("2020-04-18", "stock", "100"),
("2020-04-19", "inbound", "800"),
("2020-04-19", "outbound", "650"),
("2020-04-19", "stock", "250"),
("2020-04-20", "inbound", "730"),
("2020-04-20", "outbound", "600"),
("2020-04-20", "stock", "380"),
("2020-04-21", "inbound", "420"),
("2020-04-21", "outbound","370"),
("2020-04-21", "stock", "430");

예상 결과:

flow_date     stock_yesterday   inbound    outbound    stock_today
2020-04-18         0              500        -400         100        
2020-04-19        100             800        -650         250
2020-04-20        250             730        -600         380
2020-04-21        380             420        -370         430

기본적으로, 제 결과에서 저는 다음 시간대를 보여드리고 싶습니다.stock_yesterday + inbound - outbound = stock_today.
따라서 기존 테이블을 다음과 같이 변경해야 합니다.

flow_types로 사용됩니다.columns결과적으로
stock_yesterday그것은flow_quantityflow_type stock그 전날의
기타 모든flow_types동일한 것flow_date.


지금까지 저는 이 질문을 생각해 냈지만 작동하지 않았습니다.

SELECT
flow_date,
(CASE WHEN flow_type = "inbound" THEN flow_quantity END) AS inbound,
(CASE WHEN flow_type = "outbound" THEN flow_quantity END) AS outbound,
(CASE WHEN flow_type = "stock" THEN flow_quantity END) AS stock_today
FROM logistics
GROUP BY 1;

다음만 표시됩니다.inbound.
저는 또한 어떻게 추가할 수 있는지 전혀 모르겠습니다.stock_yesterday질문에 대해서는

예상 결과를 얻으려면 쿼리에서 무엇을 변경해야 합니까?

창 기능 및 집계를 사용할 수 있습니다.

select
    flow_date,
    sum(inbound + outbound) 
        over(order by flow_date rows between unbounded preceding and 1 preceding) stock_yesterday,
    inbound,
    outbound,
    sum(inbound + outbound) over(order by flow_date) stock_today
from (
    select 
        flow_date,
        sum(case when flow_type = 'inbound' then flow_quantity else 0 end) inbound,
        sum(case when flow_type = 'outbound' then -flow_quantity else 0 end) outbound
    from logistics
    group by flow_date
) t
order by flow_date

하위 쿼리는 꼭 필요한 것은 아니지만 구문을 단축하는 데 도움이 됩니다.

DB Fiddle에 대한 데모:

flow_date | stock_build | 인바운드 | 아웃바운드 | stock_today:--------- | --------------: | ------: | -------: | ----------:2020-04-18 | null | 500 | -400 | 1002020-04-19 |             100 |     800 |     -650 |         2502020-04-20 |             250 |     730 |     -600 |         3802020-04-21 |             380 |     420 |     -370 |         430

언급URL : https://stackoverflow.com/questions/61456288/add-value-with-previous-date-to-actual-date-in-query-result

반응형