programing

루프 내의 크로스 테이블

bestcode 2022. 9. 30. 11:14
반응형

루프 내의 크로스 테이블

이 테이블이 두 개 있어요.

Item Mov

Item  Date
A     2018-03-31
A     2018-03-30
A     2018-03-25
B     2018-03-28
B     2018-03-29

및 날짜 테이블

Date
2018-03-31
2018-03-30
2018-03-29
2018-03-28
2018-03-27
2018-03-26
2018-03-25

제가 필요로 하는 것은 그 두 가지 사이에 일종의 교차상품이 있는데, 각 아이템의 가장 오래된 날짜로 한정되어 있습니다.처음에는 심플한 크로스 제품을 사용했습니다.

select distinct t.Item, f.Date from ItemMov t cross join DateTable f

이것을 받다

Item       Date
 A    2018-03-31
 A    2018-03-30
 A    2018-03-29
 A    2018-03-28
 A    2018-03-27
 A    2018-03-26
 A    2018-03-25
 B    2018-03-31
 B    2018-03-30
 B    2018-03-29
 B    2018-03-28
 B    2018-03-27
 B    2018-03-26
 B    2018-03-25

물론 이 건널목은 B와 같은 일부 품목의 경우 첫 번째 날짜보다 일찍 날짜를 가져옵니다.원하는 출력은 이와 비슷해야 하지만 각 항목의 최소(날짜)로 제한됩니다.그렇다면 크로스 테이블에서 이 작업을 수행하는 이유나 루프를 사용해야 하는 이유가 있을까요?

바람직한 출력

Item       Date
 A    2018-03-31
 A    2018-03-30
 A    2018-03-29
 A    2018-03-28
 A    2018-03-27
 A    2018-03-26
 A    2018-03-25
 B    2018-03-31
 B    2018-03-30
 B    2018-03-29
 B    2018-03-28

예를 들어join와 함께on절 날짜 식:

select distinct t.Item, f.Date 
from ItemMov t 
inner join DateTable f on t.Date <= f.Date
-- cross join DateTable f on t.Date <= f.Date
order by t.Item, f.Date desc

렉스테스터 데모

다음 작업을 수행하기 전에 집약할 수 있습니다.join:

select i.item, d.date
from (select i.item, min(date) as min_date, max(date) as max_date
      from itemmov i
      group by i.item
     ) i join
     datetable d
     on d.date >= i.min_date and d.date <= i.max_date
order by i.item, d.date;

언급URL : https://stackoverflow.com/questions/56006764/cross-tables-in-a-loop

반응형