Cai
2026-08-20 2612bb798dd1b9efe05cb526799c3660435de449
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
WITH target AS (
  SELECT '002747.SZ' symbol UNION ALL SELECT '600889.SH'
), p AS (
  SELECT d.symbol,d.trade_date,d.open_price,d.high_price,d.low_price,d.close_price,d.amount,
         ROW_NUMBER() OVER (PARTITION BY d.symbol ORDER BY d.trade_date DESC) rn_desc
  FROM a_share_daily_price d JOIN target t ON d.symbol=t.symbol
  WHERE d.trade_date >= '2026-03-01'
), keydates AS (
  SELECT symbol,
    MAX(CASE WHEN trade_date <= '2026-03-31' THEN trade_date END) d_q1,
    MAX(trade_date) d_latest
  FROM p GROUP BY symbol
), prices AS (
  SELECT k.symbol,k.d_q1,k.d_latest,
    MAX(CASE WHEN p.trade_date=k.d_q1 THEN p.close_price END) close_q1,
    MAX(CASE WHEN p.trade_date=k.d_latest THEN p.close_price END) close_latest,
    MAX(CASE WHEN p.rn_desc=5 THEN p.close_price END) close_5d,
    MAX(CASE WHEN p.rn_desc=10 THEN p.close_price END) close_10d,
    MAX(CASE WHEN p.rn_desc=20 THEN p.close_price END) close_20d,
    MAX(CASE WHEN p.rn_desc=60 THEN p.close_price END) close_60d,
    AVG(CASE WHEN p.rn_desc<=20 THEN p.amount END) amount_20d,
    AVG(CASE WHEN p.rn_desc<=60 THEN p.amount END) amount_60d,
    MAX(CASE WHEN p.rn_desc<=20 THEN p.high_price END) high_20d,
    MAX(CASE WHEN p.rn_desc<=60 THEN p.high_price END) high_60d
  FROM keydates k JOIN p ON p.symbol=k.symbol GROUP BY k.symbol,k.d_q1,k.d_latest
)
SELECT symbol,d_q1,d_latest,
  ROUND(close_q1,4) close_q1,
  ROUND(close_latest,4) close_latest,
  ROUND((close_latest/close_q1-1)*100,2) ret_since_q1_pct,
  ROUND((close_latest/close_5d-1)*100,2) ret_5d_pct,
  ROUND((close_latest/close_10d-1)*100,2) ret_10d_pct,
  ROUND((close_latest/close_20d-1)*100,2) ret_20d_pct,
  ROUND((close_latest/close_60d-1)*100,2) ret_60d_pct,
  ROUND((close_latest/high_20d-1)*100,2) dist_high_20d_pct,
  ROUND((close_latest/high_60d-1)*100,2) dist_high_60d_pct,
  ROUND(amount_20d/100000000,2) amount_20d_yi,
  ROUND(amount_60d/100000000,2) amount_60d_yi,
  ROUND((amount_20d/amount_60d-1)*100,2) amount_20d_vs_60d_pct
FROM prices