简体   繁体   English

这个MySQL查询有什么问题?

[英]Whats wrong with this MySQL query?

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

This is my structure: 这是我的结构:

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

I'm trying to get only the stocks that for every date within that date range, DAILY_CHANGE_PERCENT is lower than -0.1 我正在尝试只获取在该日期范围内的每个日期DAILY_CHANGE_PERCENT低于-0.1的股票

at the moment i'm getting mixed results. 目前,我得到的结果好坏参半。

Example of a valid result: 有效结果示例:

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

Thanks, 谢谢,

To get your "valid result" with all columns, is this what you used? 为了获得所有列的"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'

I swapped to stock_id in case there are duplicate symbols. 万一有重复的符号,我换成stock_id。
Notice also that I use the date filter twice. 还要注意,我两次使用了日期过滤器。

You want the distinct set of stock symbols where there is any drop in price duing the specified period AND you want to remove from that set of stock symbols any stock whose price went up on any day in the specified period. 您想要一组独特的股票代码,其中在指定期间内价格有任何下跌,并且您想要从该股票代码组中删除在指定时期内任何一天价格上涨的任何股票。 Simply looking for a maximum drop of less than 'x' does not rule out stocks that may have gone up at some point. 仅仅寻找最大跌幅小于“ x”并不能排除某些时候可能上涨的股票。

What data type you have of DAILY_CHANGE_PERCENT column? 您在DAILY_CHANGE_PERCENT列中拥有哪种数据类型? if this is varchar or so the lower-than won't work. 如果这是varchar左右,则低于varchar将不起作用。

Otherwise - I look at your query and it seems to be OK. 否则-我查看您的查询,看来还可以。

UPDATE UPDATE

Or try this one: 或尝试以下方法:

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'

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM