SELECT storeCode, stockinday, isnull(dbo.uf_storeName(dealercode,storeCode),'창고출고') as storeName, orderday, userid FROM orders where dealerCode='1447' and stockinDay between '20230405' and '20230410' and orderday in (select max(orderday) from orders where dealerCode='1447' and stockinDay between '20230405' and '20230412' group by storecode) group by storecode,stockinday,dbo.uf_storeName(dealercode,storeCode),orderday,userid
현재 코드가 이렇게 되어있는데 주문날짜중 최근날짜 리스트를 뽑는데 147건만 조회해도 18초가 걸리네요.. 속도개선할수있는 방법이있을까요??
품목은 조회되지않습니다 원하는건 storeCode가 주문을 넣은시간과 날짜만 이라서요
orderday에 시간정보도 포함되어있습니다.
A라는 storeCode에서 5개의 품목을 주문했다면 그 품목의 orderday중 제일 높은값만 가져오려고합니다.
storeCode | stockinday | storeName | orderday | userid |
2001 | 20230401 | A매출처 | 2023-04-03 13:20:33.433 | abcbf |
2002 | 20230401 | B매출처 | 2023-03-29 15:14:05.353 | 테스트 |
2003 | 20230402 | A매출처 | 2023-03-29 10:14:23.190 | 123123 |
2004 | 20230403 | C매출처 | 2023-04-03 13:57:50.093 | 4235 |
이런식으로 결과값이나옵니다.
-- (예시) 발주일자(stockinDay)별 최종 주문일시(orderday)에 대한 주문내역 조회 -- stockinDay 에는 일자만 저장되고 orderday 에는 일시가 저장되는 것으로 이해하고 작성했습니다. SELECT storeCode , stockinday , ISNULL(dbo.uf_storeName(dealercode, storeCode), '창고출고') storeName , orderday , userid FROM (SELECT dealercode , storeCode , stockinday , orderday , userid , RANK() OVER(PARTITION BY stockinday ORDER BY orderday DESC) rk FROM orders WHERE dealerCode = '1447' AND stockinDay BETWEEN '20230405' AND '20230412' ) a WHERE rk = 1 -- GROUP BY dealercode, storeCode, stockinday, orderday, userid -- 중복제거 필요시 ;
-- (예시) 매출처(storeCode)별 최종 주문일시(orderday)에 대한 주문내역 조회 SELECT storeCode , stockinday , ISNULL(dbo.uf_storeName(dealercode, storeCode), '창고출고') storeName , orderday , userid FROM (SELECT dealercode , storeCode , stockinday , orderday , userid , RANK() OVER(PARTITION BY storeCode ORDER BY orderday DESC) rk FROM orders WHERE dealerCode = '1447' AND stockinDay BETWEEN '20230405' AND '20230412' ) a WHERE rk = 1 -- GROUP BY dealercode, storeCode, stockinday, orderday, userid -- 중복제거 필요시 ;