<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
	 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
	 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
	 
	<!-- 해당 부분의 namespace는 project package + Mapper Package + Mapper Interface 이름입니다. -->
	<mapper namespace="com.elt.ems.mapper.PriceMapper">
	
    <sql id="commonPagingHeader"  >
      SELECT R1.* FROM (
    </sql>
    
    <sql id="commonPagingFooter"  >
      ) R1 LIMIT #{pgtl.startNo}, #{pgtl.listPerPage}
    </sql>   
    	
		<!-- 해당 부분의 id는 MapperClass의 함수 이름과 유사하여야 합니다. -->
		<!-- 
		<select id="selectList" parameterType="com.elt.ems.vo.PriceVo"  resultType="com.elt.ems.vo.PriceVo">
			select *
			from t_price
			where inputYmd = #{inputYmd}  
			order by seq desc, typeCode desc		        
   		</select>
   		 -->
   		 
		<select id="selectList" parameterType="com.elt.ems.vo.PriceVo"  resultType="com.elt.ems.vo.PriceVo">
			select * from (
			    SELECT R1.* FROM ( 
			        select * from t_price where inputYmd &lt;= #{inputYmd} and typeCode='RE' order by inputYmd desc
			    ) R1 LIMIT 0, 1
			) r
			union 
			select * from (
			    SELECT R1.* FROM ( 
			        select * from t_price where inputYmd &lt;= #{inputYmd} and typeCode='SM' order by inputYmd desc
			    ) R1 LIMIT 0, 1
			) s				
   		</select>   
   		
		<select id="selectListDay" parameterType="com.elt.ems.common.CaseSensibleHashMap"  resultType="com.elt.ems.common.CaseSensibleHashMap">
			select inputYmd, MAX(CASE WHEN typeCode ='SM' THEN tradeYmd END ) as smTradeYmd, MAX(CASE WHEN typeCode ='RE' THEN tradeYmd END ) as reTradeYmd,
                SUM(CASE WHEN typeCode ='SM' THEN 1 ELSE 0 END  ) AS smCount, SUM(CASE WHEN typeCode ='RE' THEN 1 ELSE 0 END  ) AS reCount,
			    MIN(CASE WHEN typeCode ='SM' THEN min END )  as SmpMin, MAX(CASE WHEN typeCode ='SM' THEN max END )  as SmpMax, TRUNCATE(AVG(CASE WHEN typeCode ='SM' THEN avg END ),2)  as SmpAvg,
                MIN(CASE WHEN typeCode ='RE' THEN min END )  as RecMin, MAX(CASE WHEN typeCode ='RE' THEN max END )  as RecMax, TRUNCATE(AVG(CASE WHEN typeCode ='RE' THEN avg END ),2)  as RecAvg,
                MAX(createDateTime ) as createDateTime
			from  t_price
			where inputYmd between #{startYmd} and #{endYmd} 
			group by inputYmd 
   		</select>    		
   		
   		<select id="selectListMonth" parameterType="String"  resultType="com.elt.ems.vo.PriceVo">
			select inputYmd, typeCode, tradeYmd, min, max, avg
			from t_price 
			where inputYmd like concat(#{inputMonth}, '%')
			group by inputYmd, typeCode 
   		</select>
   		
		<select id="selectListRecent" parameterType="com.elt.ems.vo.PriceVo"  resultType="com.elt.ems.vo.PriceVo">
			select 
			max(CASE WHEN s.typeCode = 'SM' THEN  avg END) as avgSmp,
			max(CASE WHEN s.typeCode = 'RE' THEN  avg END) as avgRec, 
			s.inputYmd, s.createDatetime
			from (
			    select inputYmd, tradeYmd, typeCode, max(avg) as avg, createDatetime from t_price  
			    where inputYmd between DATE_ADD(#{inputYmd}, INTERVAL -8 DAY) and #{inputYmd} 
			    group by inputYmd, typeCode
			) s
			group by s.inputYmd
			order by inputYmd asc
<!--  		
			select inputYmd, typeCode, tradeYmd, min, max, avg
			from t_price 
			where inputYmd between DATE_ADD(#{inputYmd}, INTERVAL -8 DAY) and #{inputYmd} 
			group by inputYmd, typeCode      -->
   		</select>     		
   		
	</mapper>