这个MySQL查询有什么问题?

时间:2011-03-16 10:47:18

标签: mysql sql

SELECT STOCK_SYMBOL FROM daily
WHERE DAILY_DATE > '2011-03-01 23:59:59'
GROUP BY STOCK_SYMBOL HAVING MAX(DAILY_CHANGE_PERCENT) < -0.1

这是我的结构:

STOCK_ID    STOCK_SYMBOL    DAILY_DATE            DAILY_CHANGE_PERCENT
1           GOOG            2011-03-03 01:01:01   -0.300

我试图只获得该日期范围内每个日期的股票,DAILY_CHANGE_PERCENT低于-0.1

目前我的结果好坏参半。

有效结果的示例:

STOCK_ID    STOCK_SYMBOL    DAILY_DATE            DAILY_CHANGE_PERCENT
1           GOOG            2011-03-03 01:01:01   -0.300
1           GOOG            2011-03-04 01:01:01   -0.110
1           GOOG            2011-03-05 01:01:01   -0.500
1           GOOG            2011-03-06 01:01:01   -0.200

谢谢,

3 个答案:

答案 0 :(得分:1)

要获得所有列的"valid result",这是您使用的吗?

SELECT daily.STOCK_ID, STOCK_SYMBOL, DAILY_DATE, DAILY_CHANGE_PERCENT
FROM daily
join (
    SELECT STOCK_ID
    FROM daily
    WHERE DAILY_DATE > '2011-03-01 23:59:59'
    GROUP BY STOCK_ID
    HAVING MAX(DAILY_CHANGE_PERCENT) < -0.1
) X ON X.STOCK_ID = daily.STOCK_ID
WHERE DAILY_DATE > '2011-03-01 23:59:59'

如果有重复的符号,我换成了stock_id 另请注意,我使用了两次日期过滤器。

答案 1 :(得分:0)

您需要一组独特的股票代码,其中指定期间的价格有任何下跌,并且您希望从该组股票代码中删除任何在指定期间内任何一天价格上涨的股票。仅仅寻找小于'x'的最大跌幅并不排除可能在某些时候上涨的股票。

答案 2 :(得分:0)

您拥有DAILY_CHANGE_PERCENT列的数据类型是什么? 如果这是varchar左右,则低于 - 不会起作用。

否则 - 我看看你的查询,似乎没问题。

<强>更新

或试试这个:

SELECT STOCK_SYMBOL 
FROM daily
GROUP BY STOCK_SYMBOL 
HAVING MAX(DAILY_CHANGE_PERCENT) < -0.1 AND DAILY_DATE > '2011-03-01 23:59:59'