|
|
@@ -0,0 +1,156 @@
|
|
|
+<?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">
|
|
|
+<mapper namespace="com.yingpai.gupiao.mapper.StockPoolHistoryMapper">
|
|
|
+
|
|
|
+ <!-- 查询历史数据(带隔日信息),每只股票只取隔日涨幅最大的一条 -->
|
|
|
+ <select id="selectHistoryWithNextDay" resultType="com.yingpai.gupiao.domain.vo.StockHistoryVO">
|
|
|
+ SELECT
|
|
|
+ t.id,
|
|
|
+ t.recordDate,
|
|
|
+ t.stockCode,
|
|
|
+ t.stockName,
|
|
|
+ t.closePrice,
|
|
|
+ t.nextDayHighPrice,
|
|
|
+ t.nextDayHighTrend,
|
|
|
+ CASE
|
|
|
+ WHEN t.nextDayHighTrend IS NOT NULL AND t.nextDayHighTrend >= 2 THEN 'success'
|
|
|
+ WHEN t.nextDayHighTrend IS NOT NULL AND t.nextDayHighTrend <= -3 THEN 'fail'
|
|
|
+ ELSE NULL
|
|
|
+ END AS status
|
|
|
+ FROM (
|
|
|
+ SELECT
|
|
|
+ h.id,
|
|
|
+ h.record_date AS recordDate,
|
|
|
+ h.stock_code AS stockCode,
|
|
|
+ h.stock_name AS stockName,
|
|
|
+ h.close_price AS closePrice,
|
|
|
+ next_day.day_highest_price AS nextDayHighPrice,
|
|
|
+ next_day.high_trend AS nextDayHighTrend,
|
|
|
+ ROW_NUMBER() OVER (PARTITION BY h.stock_code ORDER BY COALESCE(next_day.high_trend, -9999) DESC) AS rn
|
|
|
+ FROM stock_pool_history h
|
|
|
+ INNER JOIN stock_pool sp ON h.stock_code = sp.stock_code
|
|
|
+ AND sp.pool_type = #{poolType}
|
|
|
+ AND sp.status = 1
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ stock_code,
|
|
|
+ record_date,
|
|
|
+ day_highest_price,
|
|
|
+ high_trend
|
|
|
+ FROM stock_pool_history
|
|
|
+ ) next_day ON h.stock_code = next_day.stock_code
|
|
|
+ AND next_day.record_date = (
|
|
|
+ SELECT MIN(record_date)
|
|
|
+ FROM stock_pool_history
|
|
|
+ WHERE stock_code = h.stock_code
|
|
|
+ AND record_date > h.record_date
|
|
|
+ )
|
|
|
+ WHERE h.record_date >= #{startDate}
|
|
|
+ AND h.record_date <= #{endDate}
|
|
|
+ ) t
|
|
|
+ WHERE t.rn = 1
|
|
|
+ ORDER BY CASE WHEN t.nextDayHighTrend IS NULL THEN 1 ELSE 0 END, t.nextDayHighTrend DESC
|
|
|
+ LIMIT #{limit} OFFSET #{offset}
|
|
|
+ </select>
|
|
|
+
|
|
|
+ <!-- 统计记录总数(每只股票只算一条) -->
|
|
|
+ <select id="countHistory" resultType="int">
|
|
|
+ SELECT COUNT(DISTINCT h.stock_code)
|
|
|
+ FROM stock_pool_history h
|
|
|
+ INNER JOIN stock_pool sp ON h.stock_code = sp.stock_code
|
|
|
+ AND sp.pool_type = #{poolType}
|
|
|
+ AND sp.status = 1
|
|
|
+ WHERE h.record_date >= #{startDate}
|
|
|
+ AND h.record_date <= #{endDate}
|
|
|
+ </select>
|
|
|
+
|
|
|
+ <!-- 查询统计数据(成功率、平均收益、总交易次数) -->
|
|
|
+ <select id="selectHistoryStats" resultType="map">
|
|
|
+ SELECT
|
|
|
+ COUNT(*) AS totalCount,
|
|
|
+ SUM(CASE WHEN nextDayHighTrend >= 2 THEN 1 ELSE 0 END) AS successCount,
|
|
|
+ SUM(CASE WHEN nextDayHighTrend <= -3 THEN 1 ELSE 0 END) AS failCount,
|
|
|
+ AVG(nextDayHighTrend) AS avgTrend
|
|
|
+ FROM (
|
|
|
+ SELECT
|
|
|
+ h.stock_code,
|
|
|
+ next_day.high_trend AS nextDayHighTrend,
|
|
|
+ ROW_NUMBER() OVER (PARTITION BY h.stock_code ORDER BY COALESCE(next_day.high_trend, -9999) DESC) AS rn
|
|
|
+ FROM stock_pool_history h
|
|
|
+ INNER JOIN stock_pool sp ON h.stock_code = sp.stock_code
|
|
|
+ AND sp.pool_type = #{poolType}
|
|
|
+ AND sp.status = 1
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ stock_code,
|
|
|
+ record_date,
|
|
|
+ high_trend
|
|
|
+ FROM stock_pool_history
|
|
|
+ ) next_day ON h.stock_code = next_day.stock_code
|
|
|
+ AND next_day.record_date = (
|
|
|
+ SELECT MIN(record_date)
|
|
|
+ FROM stock_pool_history
|
|
|
+ WHERE stock_code = h.stock_code
|
|
|
+ AND record_date > h.record_date
|
|
|
+ )
|
|
|
+ WHERE h.record_date >= #{startDate}
|
|
|
+ AND h.record_date <= #{endDate}
|
|
|
+ ) t
|
|
|
+ WHERE t.rn = 1
|
|
|
+ </select>
|
|
|
+
|
|
|
+ <!-- 根据股票代码或名称模糊查询最新的历史记录 -->
|
|
|
+ <select id="selectLatestByKeyword" resultType="com.yingpai.gupiao.domain.vo.StockHistoryVO">
|
|
|
+ SELECT
|
|
|
+ h.id,
|
|
|
+ h.record_date AS recordDate,
|
|
|
+ h.stock_code AS stockCode,
|
|
|
+ h.stock_name AS stockName,
|
|
|
+ h.change_percent AS changePercent,
|
|
|
+ h.close_price AS closePrice,
|
|
|
+ h.total_amount AS totalAmount,
|
|
|
+ h.strength_score AS strengthScore,
|
|
|
+ h.circulation_market_value AS circulationMarketValue,
|
|
|
+ h.main_rise_period AS mainRisePeriod,
|
|
|
+ h.recent_rise_hand AS recentRiseHand,
|
|
|
+ h.recent_limit_up AS recentLimitUp,
|
|
|
+ h.day_highest_price AS dayHighestPrice,
|
|
|
+ h.day_lowest_price AS dayLowestPrice,
|
|
|
+ h.day_avg_price AS dayAvgPrice,
|
|
|
+ h.day_close_price AS dayClosePrice,
|
|
|
+ h.high_trend AS highTrend
|
|
|
+ FROM stock_pool_history h
|
|
|
+ WHERE (h.stock_code LIKE CONCAT('%', #{keyword}, '%')
|
|
|
+ OR h.stock_name LIKE CONCAT('%', #{keyword}, '%'))
|
|
|
+ ORDER BY h.record_date DESC
|
|
|
+ LIMIT 1
|
|
|
+ </select>
|
|
|
+
|
|
|
+ <!-- 根据股票代码或名称和日期查询历史记录 -->
|
|
|
+ <select id="selectByKeywordAndDate" resultType="com.yingpai.gupiao.domain.vo.StockHistoryVO">
|
|
|
+ SELECT
|
|
|
+ h.id,
|
|
|
+ h.record_date AS recordDate,
|
|
|
+ h.stock_code AS stockCode,
|
|
|
+ h.stock_name AS stockName,
|
|
|
+ h.change_percent AS changePercent,
|
|
|
+ h.close_price AS closePrice,
|
|
|
+ h.total_amount AS totalAmount,
|
|
|
+ h.strength_score AS strengthScore,
|
|
|
+ h.circulation_market_value AS circulationMarketValue,
|
|
|
+ h.main_rise_period AS mainRisePeriod,
|
|
|
+ h.recent_rise_hand AS recentRiseHand,
|
|
|
+ h.recent_limit_up AS recentLimitUp,
|
|
|
+ h.day_highest_price AS dayHighestPrice,
|
|
|
+ h.day_lowest_price AS dayLowestPrice,
|
|
|
+ h.day_avg_price AS dayAvgPrice,
|
|
|
+ h.day_close_price AS dayClosePrice,
|
|
|
+ h.high_trend AS highTrend
|
|
|
+ FROM stock_pool_history h
|
|
|
+ WHERE (h.stock_code LIKE CONCAT('%', #{keyword}, '%')
|
|
|
+ OR h.stock_name LIKE CONCAT('%', #{keyword}, '%'))
|
|
|
+ AND h.record_date = #{recordDate}
|
|
|
+ LIMIT 1
|
|
|
+ </select>
|
|
|
+
|
|
|
+</mapper>
|