daily_base_column.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. package daily_base_column
  2. import (
  3. "github.com/beego/beego/v2/client/orm"
  4. "hongze/hongze_open_api/utils"
  5. )
  6. type TickerDataItem struct {
  7. Date string `json:"date"`
  8. Ticker string `json:"ticker"`
  9. BaseColumnName string `json:"base_column_name"`
  10. TickerValue float64 `json:"ticker_value"`
  11. LastValue float64 `json:"last_value"`
  12. DdValue float64 `json:"dd_value"`
  13. WwValue float64 `json:"ww_value"`
  14. MmValue float64 `json:"mm_value"`
  15. }
  16. // GetDataByBaseColumnTickers17 获取数据指标
  17. func GetDataByBaseColumnTickers17(tickers []string) (list []*TickerDataItem, err error) {
  18. lenNum := len(tickers)
  19. if lenNum <= 0 {
  20. return
  21. }
  22. sql := `SELECT
  23. ifnull(max(doo.date), max(dd.date)) AS date,
  24. dbc.base_column_ticker AS ticker,
  25. dbc.base_column_name,
  26. ifnull(
  27. (
  28. SELECT
  29. VALUE
  30. FROM
  31. daily_data
  32. WHERE
  33. ticker = dbc.base_column_ticker
  34. AND date = ifnull(max(doo.date), max(dd.date))
  35. ),
  36. (
  37. SELECT
  38. VALUE
  39. FROM
  40. daily_original
  41. WHERE
  42. ticker = dbc.base_column_ticker
  43. AND date = ifnull(max(doo.date), max(dd.date))
  44. )
  45. ) AS ticker_value,
  46. ifnull(
  47. (
  48. SELECT
  49. VALUE
  50. FROM
  51. daily_data
  52. WHERE
  53. ticker = dbc.base_column_ticker
  54. AND date < ifnull(max(doo.date), max(dd.date))
  55. ORDER BY
  56. date DESC
  57. LIMIT 1
  58. ),
  59. (
  60. SELECT
  61. VALUE
  62. FROM
  63. daily_original
  64. WHERE
  65. ticker = dbc.base_column_ticker
  66. AND date < ifnull(max(doo.date), max(dd.date))
  67. ORDER BY
  68. date DESC
  69. LIMIT 1
  70. )
  71. ) AS last_value
  72. FROM
  73. daily_base_column AS dbc
  74. LEFT JOIN daily_data AS dd ON dbc.base_column_ticker = dd.ticker
  75. LEFT JOIN daily_original AS doo ON dbc.base_column_ticker = doo.ticker
  76. WHERE
  77. dbc.base_column_ticker IN (` + utils.GetOrmInReplace(lenNum) + `)
  78. GROUP BY
  79. dbc.base_column_ticker`
  80. o := orm.NewOrm()
  81. _, err = o.Raw(sql, tickers).QueryRows(&list)
  82. return
  83. }
  84. // GetDataByBaseColumnTickers 获取数据指标
  85. func GetDataByBaseColumnTickers(tickers []string) (list []*TickerDataItem, err error) {
  86. lenNum := len(tickers)
  87. if lenNum <= 0 {
  88. return
  89. }
  90. sql := `select ifnull(max(doo.date),max(dd.date)) as date,dbc.base_column_ticker as ticker,dbc.base_column_name ,
  91. ifnull((select value from daily_data where ticker = dbc.base_column_ticker and date <= ifnull(max(doo.date),max(dd.date)) and value is not null order by date desc limit 1),(select value from daily_original where ticker = dbc.base_column_ticker and date <= ifnull(max(doo.date),max(dd.date)) and value is not null order by date desc limit 1)) as ticker_value,
  92. ifnull((select value from daily_data where ticker = concat(dbc.base_column_ticker,'_dd') and date <= ifnull(max(doo.date),max(dd.date)) and value is not null order by date desc limit 1),(select value from daily_original where ticker = concat(dbc.base_column_ticker,'_dd') and date <= ifnull(max(doo.date),max(dd.date))and value is not null order by date desc limit 1)) as dd_value,
  93. ifnull((select value from daily_data where ticker = concat(dbc.base_column_ticker,'_ww') and date <= ifnull(max(doo.date),max(dd.date)) and value is not null order by date desc limit 1),(select value from daily_original where ticker = concat(dbc.base_column_ticker,'_ww') and date <= ifnull(max(doo.date),max(dd.date)) and value is not null order by date desc limit 1)) as ww_value,
  94. ifnull((select value from daily_data where ticker = concat(dbc.base_column_ticker,'_mm') and date <= ifnull(max(doo.date),max(dd.date)) and value is not null order by date desc limit 1),(select value from daily_original where ticker = concat(dbc.base_column_ticker,'_mm') and date <= ifnull(max(doo.date),max(dd.date)) and value is not null order by date desc limit 1)) as mm_value
  95. from
  96. daily_base_column AS dbc
  97. LEFT JOIN daily_data AS dd ON dbc.base_column_ticker = dd.ticker
  98. LEFT JOIN daily_original AS doo ON dbc.base_column_ticker = doo.ticker
  99. WHERE
  100. dbc.base_column_ticker IN (` + utils.GetOrmInReplace(lenNum) + `)
  101. GROUP BY
  102. dbc.base_column_ticker`
  103. o := orm.NewOrm()
  104. _, err = o.Raw(sql, tickers).QueryRows(&list)
  105. return
  106. }