MySQL_Retrieving股票价格基于max和min_date

问题描述

我正在尝试检索每月第一个和最后一个日期的收盘和开盘股票价格。

出于某种原因,'end_date_closed_stock_price' 的输出为 NULL。

你知道它为什么会给出这个结果吗?

另外,您能告诉我检索该月最后一天的适当查询吗?

以下是我的查询输出

提前致谢!

SELECT YEAR(date) AS years,MONTH(date) AS months,CASE WHEN date = MAX(date) THEN close END end_date_closed_stock_price,CASE WHEN date = MIN(date) THEN open END first_date_opened_stock_price
  FROM nasdaq_feb_25_1971_feb_25_2021
 GROUP 
    BY 1,2
 ORDER 
    BY 1 DESC;

---OUTPUT---
2020    5    NULL   9382.349609
2019    1    NULL   6947.459961
2019    2    NULL   7266.279785
2019    3    NULL   7582.290039

解决方法

可能有更有效的解决方案,但这应该有效:

WITH dates as
  (SELECT YEAR(date) as years,MONTH(date) AS months,MAX(date) as end_date,MIN(date) as first_date
   FROM nasdaq_feb_25_1971_feb_25_2021
   GROUP BY 1,2)
SELECT dates.years,dates.months,price1.close as end_date_closed_stock_price,price2.open as first_date_opened_stock_price
  FROM dates
  JOIN nasdaq_feb_25_1971_feb_25_2021 price1
  ON price1.date = dates.end_date
  JOIN nasdaq_feb_25_1971_feb_25_2021 price2
  ON price2.date = dates.first_date
 ORDER 
    BY 1 DESC,2 DESC;

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...