|
|
|
|
@ -136,51 +136,28 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|
|
|
|
select count(1) from t_trends where trade_date = #{tradeDate}
|
|
|
|
|
</select>
|
|
|
|
|
|
|
|
|
|
<!-- 查询趋势分段列表 -->
|
|
|
|
|
<select id="listTrendsSection" parameterType="TTrends" resultType="map">
|
|
|
|
|
<!-- 第一步:获取最近10个交易日 -->
|
|
|
|
|
WITH recent_days AS (
|
|
|
|
|
SELECT trade_date
|
|
|
|
|
FROM t_trends
|
|
|
|
|
WHERE momentum_type = #{momentumType}
|
|
|
|
|
GROUP BY trade_date
|
|
|
|
|
ORDER BY trade_date DESC
|
|
|
|
|
LIMIT 10
|
|
|
|
|
),
|
|
|
|
|
<!-- 第二步:获取所有行业名称 -->
|
|
|
|
|
industry_names AS (
|
|
|
|
|
SELECT DISTINCT industry_name
|
|
|
|
|
FROM t_trends
|
|
|
|
|
WHERE momentum_type = #{momentumType}
|
|
|
|
|
AND trade_date IN (SELECT trade_date FROM recent_days)
|
|
|
|
|
),
|
|
|
|
|
<!-- 第三步:获取每个行业在每个交易日的排名 -->
|
|
|
|
|
industry_ranks AS (
|
|
|
|
|
SELECT
|
|
|
|
|
i.industry_name,
|
|
|
|
|
rd.trade_date,
|
|
|
|
|
t.`rank`
|
|
|
|
|
FROM industry_names i
|
|
|
|
|
CROSS JOIN recent_days rd
|
|
|
|
|
LEFT JOIN t_trends t ON i.industry_name = t.industry_name
|
|
|
|
|
AND rd.trade_date = t.trade_date
|
|
|
|
|
AND t.momentum_type = #{momentumType}
|
|
|
|
|
)
|
|
|
|
|
<!-- 第四步:将数据转换为列形式 -->
|
|
|
|
|
SELECT
|
|
|
|
|
industry_name,
|
|
|
|
|
MAX(CASE WHEN trade_date = (SELECT trade_date FROM recent_days ORDER BY trade_date DESC LIMIT 1) THEN `rank` ELSE 0 END) AS current_day,
|
|
|
|
|
MAX(CASE WHEN trade_date = (SELECT trade_date FROM recent_days ORDER BY trade_date DESC LIMIT 1 OFFSET 1) THEN `rank` ELSE 0 END) AS day_2,
|
|
|
|
|
MAX(CASE WHEN trade_date = (SELECT trade_date FROM recent_days ORDER BY trade_date DESC LIMIT 1 OFFSET 2) THEN `rank` ELSE 0 END) AS day_3,
|
|
|
|
|
MAX(CASE WHEN trade_date = (SELECT trade_date FROM recent_days ORDER BY trade_date DESC LIMIT 1 OFFSET 3) THEN `rank` ELSE 0 END) AS day_4,
|
|
|
|
|
MAX(CASE WHEN trade_date = (SELECT trade_date FROM recent_days ORDER BY trade_date DESC LIMIT 1 OFFSET 4) THEN `rank` ELSE 0 END) AS day_5,
|
|
|
|
|
MAX(CASE WHEN trade_date = (SELECT trade_date FROM recent_days ORDER BY trade_date DESC LIMIT 1 OFFSET 5) THEN `rank` ELSE 0 END) AS day_6,
|
|
|
|
|
MAX(CASE WHEN trade_date = (SELECT trade_date FROM recent_days ORDER BY trade_date DESC LIMIT 1 OFFSET 6) THEN `rank` ELSE 0 END) AS day_7,
|
|
|
|
|
MAX(CASE WHEN trade_date = (SELECT trade_date FROM recent_days ORDER BY trade_date DESC LIMIT 1 OFFSET 7) THEN `rank` ELSE 0 END) AS day_8,
|
|
|
|
|
MAX(CASE WHEN trade_date = (SELECT trade_date FROM recent_days ORDER BY trade_date DESC LIMIT 1 OFFSET 8) THEN `rank` ELSE 0 END) AS day_9,
|
|
|
|
|
MAX(CASE WHEN trade_date = (SELECT trade_date FROM recent_days ORDER BY trade_date DESC LIMIT 1 OFFSET 9) THEN `rank` ELSE 0 END) AS day_10
|
|
|
|
|
FROM industry_ranks
|
|
|
|
|
GROUP BY industry_name
|
|
|
|
|
ORDER BY current_day
|
|
|
|
|
<!-- 获取最近10个交易日 -->
|
|
|
|
|
<select id="getRecentTradeDates" parameterType="String" resultType="Date">
|
|
|
|
|
SELECT DISTINCT trade_date
|
|
|
|
|
FROM t_trends
|
|
|
|
|
WHERE momentum_type = #{momentumType}
|
|
|
|
|
ORDER BY trade_date DESC
|
|
|
|
|
LIMIT 10
|
|
|
|
|
</select>
|
|
|
|
|
|
|
|
|
|
<!-- 获取所有行业名称 -->
|
|
|
|
|
<select id="getAllIndustryNames" parameterType="String" resultType="String">
|
|
|
|
|
SELECT DISTINCT industry_name
|
|
|
|
|
FROM t_trends
|
|
|
|
|
WHERE momentum_type = #{momentumType}
|
|
|
|
|
</select>
|
|
|
|
|
|
|
|
|
|
<!-- 获取指定行业在指定日期的排名 -->
|
|
|
|
|
<select id="getIndustryRankByDate" parameterType="map" resultType="Integer">
|
|
|
|
|
SELECT `rank`
|
|
|
|
|
FROM t_trends
|
|
|
|
|
WHERE momentum_type = #{momentumType}
|
|
|
|
|
AND industry_name = #{industryName}
|
|
|
|
|
AND trade_date = #{tradeDate}
|
|
|
|
|
</select>
|
|
|
|
|
</mapper>
|