| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- <?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>
|