首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何将这两个查询合并为1以满足条件?

如何将这两个查询合并为1以满足条件?
EN

Stack Overflow用户
提问于 2015-12-11 18:13:58
回答 1查看 117关注 0票数 3

作为一个使用mysql和语法的相对温和的初学者,我很难实现这个特定的查询。

我有三张桌子

  • SYMBOLS_LIST (包含股票符号列表) (key=SYMBOL)
  • T50DMA (包含已经为每个符号计算的50天移动平均值)(包含日期,FIFTY_DAY_MA列)
  • T200DMA (包含已经为每个符号计算的200天移动平均值)(包含日期,TWO_HUNDRED_DAY_MA列)

我试图确定一个符号列表,其中50 for价格与今天日期的200 for价格交叉。移动平均值已经计算并存储在相应的表中,因此不需要移动平均计算。

为了检测交叉,我尝试实现以下步骤来获得符号列表:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Today's 50DMA t1 > Today's 200DMA t2
  AND
Yesterday's 50DMA t1 <= Yesterday's 200DMA t2

我能写的最多的是两个单独的查询,给出了第一个和第二个查询的列表,但我不知道如何将它们结合起来以满足上面写的条件。

如何在1条语句中编写这两种条件?非常感谢您能提供的任何帮助。

补充编辑:

下面是我能够构造的两个查询:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
**Today's 50DMA t1 > Today's 200DMA t2**

select t1.SYMBOL from T50DMA t1, T200DMA t2 where 
t1.SYMBOL IN (SELECT SYMBOL from SYMBOLS_LIST) AND 
t1.SYMBOL=t2.SYMBOL AND
(t1.DATE='2015-12-10' AND t2.DATE='2015-12-10' AND 
t1.FIFTY_DAY_MOVING_AVERAGE > t2.TWO_HUNDRED_DAY_MOVING_AVERAGE) GROUP BY      
t1.SYMBOL, t1.DATE;

**Yesterday's 50DMA t1 <= Yesterday's 200DMA t2**

select t1.SYMBOL from T50DMA t1, T200DMA t2 where   
t1.SYMBOL IN (SELECT SYMBOL from SYMBOLS_LIST) AND   
t1.SYMBOL=t2.SYMBOL AND    
(t1.DATE='2015-12-10' - INTERVAL 1 DAY AND t2.DATE='2015-12-10' - INTERVAL 1   
DAY AND 
t1.FIFTY_DAY_MOVING_AVERAGE <= t2.TWO_HUNDRED_DAY_MOVING_AVERAGE) GROUP BY  
t1.SYMBOL, t1.DATE;

我只是不知道如何组合这些条件,使这两个条件在1语句中有效,只有那些符合条件的符号才能返回。谢谢你在这方面的帮助。

12/14/2015编辑:我尝试了这个查询,但它根本没有返回任何结果。如果我注释掉任何一行并运行它,我就会得到一个查询或另一个查询的结果,但当这两个查询都被定义时,不会得到任何结果。查询有什么问题?我被卡住了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select t1.SYMBOL 
from T50DMA t1, T200DMA t2 
where t1.SYMBOL IN (SELECT SYMBOL from SYMBOLS_LIST) 
AND ((t1.SYMBOL=t2.SYMBOL) AND (t1.DATE='2015-12-10' AND t2.DATE='2015-12-10') AND (t1.FIFTY_DAY_MOVING_AVERAGE > t2.TWO_HUNDRED_DAY_MOVING_AVERAGE))
AND ((t1.SYMBOL=t2.SYMBOL) AND (t1.DATE='2015-12-09' AND t2.DATE='2015-12-09') AND (t1.FIFTY_DAY_MOVING_AVERAGE <= t2.TWO_HUNDRED_DAY_MOVING_AVERAGE));

对Dijkgraaf的响应:

假设今天的50 DMA >今天的200 DMA (和)昨天的50 DMA <=昨天的200 DMA的条件1,我希望只看到一个符号列表(或有今天的日期),表示交叉发生了,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'2015-12-14 00:00:00', 'AAON'
'2015-12-14 00:00:00', 'ADGE'
'2015-12-14 00:00:00', 'BLK'
'2015-12-14 00:00:00', 'CRY'

我提取了昨天(2015-12-14)的数据,并通过在Excel中执行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 AND(IF(today's 50DMA>Today's 200 DMA,1,0),IF(Yesterday's 50 DMA<=Yesterday's 200DMA,1,0))  1=True, 0=False

Here are a few entries of data:
TODAY'S DATE    SYMBOL  50DMA   200DMA      YESTERDAY DATE  SYMBOL  50DMA     200DMA        RESULT
12/14/2015 0:00 ADGE    0.4991  0.498       12/11/2015 0:00 ADGE    0.4958  0.4979      TRUE
12/14/2015 0:00 CRY     10.432  10.429      12/11/2015 0:00 CRY     10.426  10.429      TRUE

For ADGE, it would be:
(0.4991 > 0.498) AND (0.4958 <= 0.4979) = true 50 DMA crossed over 200 DMA
For CRY, it would be:
(10.432 > 10.429) AND (10.426 <= 10.429) = true 50 DMA crossed over 200 DMA

由于某些原因,我不明白为什么查询不会返回任何符号。我可能没有正确地实现它,或者我在某种程度上混淆了它?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select t1.SYMBOL 
from T50DMA t1, T200DMA t2 
where t1.SYMBOL IN (SELECT SYMBOL from SYMBOLS_LIST) 
AND ((t1.SYMBOL=t2.SYMBOL) AND (t1.DATE='2015-12-14' AND t2.DATE='2015-12-14') AND (t1.FIFTY_DAY_MOVING_AVERAGE > t2.TWO_HUNDRED_DAY_MOVING_AVERAGE))
AND ((t1.SYMBOL=t2.SYMBOL) AND (t1.DATE='2015-12-11' AND t2.DATE='2015-12-11') AND (t1.FIFTY_DAY_MOVING_AVERAGE <= t2.TWO_HUNDRED_DAY_MOVING_AVERAGE));

补充问题(2015-03-17):

在一个附带的问题上,是否有一种方法(通过案例或如果声明)确定,如果间隔-1天是在星期日或星期六,让它选择前星期五?在某些情况下,即使是在一个星期五(如耶稣受难日),市场将关闭,在那里不会产生任何数据。在一个名为"WEEKLY_LOOKUP“的表中,我有一个每周实际市场日期范围的每周查找表(开始日期和结束日期)。例如,如果在星期五市场关闭,表将指示结束日期将是一个“星期四”,而不是一个星期五。

处理两种情况: 1)如果间隔-1天是星期六或周日,那么下一个工作日是星期五。2)但如果星期五是一个非市场的日子,那么就需要把它定在前一个星期四。表中有引用WEEKLY_LOOKUP (结束日期)的方法吗?例如,2015年星期五-03-25市场已经关闭.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            WEEKLY_LOOKUP
START_DATE             END_DATE
'2016-03-21 00:00:00', '2016-03-24 00:00:00'

例如,这将产生一个2016-03-28日和一个与2016-03-24相比的前一天。

是否有一种将其实现到同一个查询中的方法,或者它是否会使查询过于复杂而无法处理?谢谢你!!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-14 17:27:16

当您在SQL中说和它意味着,它必须匹配这两个条件。您有t1.DATE='2015-12-10't1.DATE='2015-12-09',因为它们不可能同时为真,同时也不会得到任何结果。

即使数据来自同一个表,您也需要使用别名将它们视为单独的表。

但是,首先,为了便于读取SQL,可以使用Joins重新格式化您的SQL,而不是复杂的WHERE子句,并且还可以为第二个查询提供不同的别名。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
**Today's 50DMA t1 > Today's 200DMA t2**

select t1.SYMBOL 
from T50DMA t1
INNER JOIN T200DMA t2 ON t2.SYMBOL=t1.SYMBOL
where t1.SYMBOL IN (SELECT SYMBOL from SYMBOLS_LIST) 
AND t1.DATE='2015-12-10' AND t2.DATE='2015-12-10' 
AND t1.FIFTY_DAY_MOVING_AVERAGE > t2.TWO_HUNDRED_DAY_MOVING_AVERAGE
GROUP BY  t1.SYMBOL, t1.DATE;

**Yesterday's 50DMA t1 <= Yesterday's 200DMA t2**

select t3.SYMBOL 
from T50DMA t3
INNER JOIN T200DMA t4 ON t4.SYMBOL=t3.SYMBOL
where t3.SYMBOL IN (SELECT SYMBOL from SYMBOLS_LIST)
AND  t3.DATE='2015-12-10' - INTERVAL 1 DAY AND t4.DATE='2015-12-10' - INTERVAL 1 DAY 
AND t3.FIFTY_DAY_MOVING_AVERAGE <= t4.TWO_HUNDRED_DAY_MOVING_AVERAGE
GROUP BY t3.SYMBOL, t3.DATE;

现在把它们加在一起。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select t1.SYMBOL 
from T50DMA t1
INNER JOIN T200DMA t2 ON t2.SYMBOL=t1.SYMBOL
INNER JOIN T50DMA t3 ON t3.SYMBOL=t1.SYMBOL
INNER JOIN T200DMA t4 ON t4.SYMBOL=t3.SYMBOL  
where t1.SYMBOL IN (SELECT SYMBOL from SYMBOLS_LIST) 
AND t1.DATE='2015-12-10' 
AND t2.DATE='2015-12-10' 
AND t3.DATE='2015-12-10' - INTERVAL 1 DAY 
AND t4.DATE='2015-12-10' - INTERVAL 1 DAY
AND t1.FIFTY_DAY_MOVING_AVERAGE > t2.TWO_HUNDRED_DAY_MOVING_AVERAGE
AND t3.FIFTY_DAY_MOVING_AVERAGE <= t4.TWO_HUNDRED_DAY_MOVING_AVERAGE
GROUP BY  t1.SYMBOL, t1.DATE;

然后再简化一点

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select t1.SYMBOL 
from T50DMA t1
INNER JOIN T200DMA t2 ON t2.SYMBOL=t1.SYMBOL AND t2.DATE=t1.DATE
INNER JOIN T50DMA t3 ON t3.SYMBOL=t1.SYMBOL AND t3.DATE=t1.DATE - INTERVAL 1 DAY 
INNER JOIN T200DMA t4 ON t4.SYMBOL=t1.SYMBOL AND t4.DATE=t3.DATE
where t1.SYMBOL IN (SELECT SYMBOL from SYMBOLS_LIST) 
AND t1.DATE='2015-12-10'             
AND t1.FIFTY_DAY_MOVING_AVERAGE > t2.TWO_HUNDRED_DAY_MOVING_AVERAGE 
AND t3.FIFTY_DAY_MOVING_AVERAGE <= t4.TWO_HUNDRED_DAY_MOVING_AVERAGE
GROUP BY t1.SYMBOL, t1.DATE

希望我没有回答你的任何疑问。试试看你是否得到了你所期望的。

请注意,您为什么要分组日期,因为您只选择一个日期,但可能您打算这样做,而不是选择一个日期。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select t1.SYMBOL, t1.DATE
from T50DMA t1
INNER JOIN T200DMA t2 ON t2.SYMBOL=t1.SYMBOL AND t2.DATE=t1.DATE
INNER JOIN T50DMA t3 ON t3.SYMBOL=t1.SYMBOL AND t3.DATE=t1.DATE - INTERVAL 1 DAY 
INNER JOIN T200DMA t4 ON t4.SYMBOL=t1.SYMBOL AND t4.DATE=t3.DATE
where t1.SYMBOL IN (SELECT SYMBOL from SYMBOLS_LIST) 
AND t1.FIFTY_DAY_MOVING_AVERAGE > t2.TWO_HUNDRED_DAY_MOVING_AVERAGE 
AND t3.FIFTY_DAY_MOVING_AVERAGE <= t4.TWO_HUNDRED_DAY_MOVING_AVERAGE
GROUP BY t1.SYMBOL, t1.DATE
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34235471

复制
相关文章
nginx 访问.php文件正常,访问.html文件500错误
Nginx遇上Access Denied提示怎么解决 这几天在摆弄linux下面的各种服务器,对nginx非常有兴趣。
友儿
2022/09/11
1.7K0
用imdisk创建内存盘存放缓存文件提高访问速度
当下内存条和SSD硬盘都比两三年前便宜很多了,2000元内配个16G内存的AMD台式机(含1080P显示器)就完全够日常办公用了,如果有条件搞2个3600MHz的16G内存条组成双通道超频到3933MHz甚至4133Hz甚至更高就更完美了。为了让内存发挥更大的作用,可以创建内存盘来放缓存,甚至一些业务都完全可以跑在内存盘里,这样访问很快。下面说说内存盘怎么实施:
Windows技术交流
2023/09/12
2.8K0
Android RxJava应用:从磁盘/内存缓存中获取缓存数据
Rxjava,由于其基于事件流的链式调用、逻辑简洁 & 使用简单的特点,深受各大 Android开发者的欢迎。
Carson.Ho
2022/03/25
2.3K0
Android RxJava应用:从磁盘/内存缓存中获取缓存数据
Android RxJava 实战系列:从磁盘 / 内存缓存中 获取缓存数据
Carson_Ho的Github地址 = RxJava2实战系列:从磁盘 / 内存缓存中 获取缓存数据
Carson.Ho
2019/02/22
2K0
Caffeine缓存 最快缓存 内存缓存
Caffeine是在Guava Cache的基础上做一层封装,性能有明显提高,二者同属于内存级本地缓存。使用Caffeine后无需使用Guava Cache,从并发的角度来讲,Caffeine明显优于Guava,原因是使用了Java 8最新的StampedLock锁技术。
赛先生和泰先生
2022/01/21
3K0
Caffeine缓存 最快缓存 内存缓存
Nginx使用Linux内存加速静态文件访问
Nginx是一个非常出色的静态资源web服务器。如果你嫌它还不够快,可以把放在磁盘中的文件,映射到内存中,减少高并发下的磁盘IO。
EltonZheng
2021/01/26
2.3K0
HTML DOM 访问
下面的例子返回包含文档中所有 <p> 元素的列表,并且这些 <p> 元素应该是 id="main" 的元素的后代(子、孙等等):
陈不成i
2021/07/21
7160
内存缓存MemoryCache
内存缓存MemoryCache实现了ICache接口,Redis同样实现了ICache接口,两者在缓存操作上达到了高度抽象统一。应用设计时一律使用ICache接口,开发环境装配为MemoryCache,生产环境根据分布式需要可以装配为Redis。如果应用系统没有分布式需求,继续使用MemoryCache更好。
JusterZhu
2022/12/07
8070
内存缓存MemoryCache
go 内存缓存
很多时候我们为了缩短单次请求的时间,就需要去分析请求在哪一步耗时比较大,一般越靠近应用层优化效果越大,后端程序就是请求到达路由解析到返回结果这一步骤了。
花落花相惜
2021/11/25
8690
[BlogCore操作文档4] MemoryCache:内存缓存
采用最新的前后端完全分离技术【 ASP.NET Core Api 6.0 + Vue 2.x 】,并结合 IdentityServer4 ,可快速解决多客户端和多资源服务的统一认证与鉴权的问题,以及整合较为完善的数据权限控制。
老张的哲学
2023/08/23
2970
[BlogCore操作文档4] MemoryCache:内存缓存
内存缓存详解
很多时候我们为了缩短单次请求的时间,就需要去分析请求在哪一步耗时比较大,一般越靠近应用层优化效果越大,后端程序就是请求到达路由解析到返回结果这一步骤了。
花落花相惜
2021/12/16
6920
从GPU的内存访问视角对比NHWC和NCHW
NHWC和NCHW是卷积神经网络(cnn)中广泛使用的数据格式。它们决定了多维数据,如图像、点云或特征图如何存储在内存中。
deephub
2023/10/07
1.6K0
从GPU的内存访问视角对比NHWC和NCHW
JMeter访问redis缓存
第二次工业革命在20世纪初, 基于劳动分工的电力驱动时代, 人类大量使用流水线的电气化时代, 20世纪70年代 电子技术,工业机器人的使用提升了生产效率, 使生产自动化水平进一步提高, 人类进入了第三次工业革命. 第四次工业革命就是工业4.0 , 基于大数据, 物联网(机器人视觉传感器)融合的系统在生产中大规模使用, 使人类进入”智能化时代”. IT技术是4.0非常重要的核心, 是支撑未来长期技术性和经济周期的基础.
louiezhou001
2019/07/24
1.2K0
JMeter访问redis缓存
centos7.0 可以访问HTML文件,不能访问PHP文件,因为php-fpm没有扩展包
解决方法 :https://blog.csdn.net/ityang_/article/details/53980190
全栈程序员站长
2022/07/07
9740
centos7.0 可以访问HTML文件,不能访问PHP文件,因为php-fpm没有扩展包
【Android 内存优化】Bitmap 内存缓存 ( Bitmap 缓存策略 | LruCache 内存缓存 | LruCache 常用操作 | 工具类代码 )
Glide 开源库 : 官方建议凡是使用到 Bitmap 解码 , 显示 , 缓存等操作 , 直接使用 Glide 开源库进行上述操作 , 不建议直接操作 Bitmap 对象 ;
韩曙亮
2023/03/27
2.2K0
(代码篇)从基础文件IO说起虚拟内存,内存文件映射,零拷贝
JAVA虚拟机内部便会调用OS底层的 read()系统调用完成操作,在调用 in.read()的时候就是从内核缓冲区直接返回数据了。
intsmaze-刘洋
2018/08/29
4740
(代码篇)从基础文件IO说起虚拟内存,内存文件映射,零拷贝
(理论篇)从基础文件IO说起虚拟内存,内存文件映射,零拷贝
  为了快速构建项目,使用高性能框架是我的职责,但若不去深究底层的细节会让我失去对技术的热爱。   探究的过程是痛苦并激动的,痛苦在于完全理解甚至要十天半月甚至没有机会去应用,激动在于技术的相同性,新的框架不再是我焦虑。   每一个底层细节的攻克,就越发觉得自己对计算机一无所知,这可能就是对知识的敬畏。
intsmaze-刘洋
2018/08/29
1.7K1
(理论篇)从基础文件IO说起虚拟内存,内存文件映射,零拷贝
禁止IIS缓存静态文件的方法(png,js,html等)
IIS为了提高性能,默认情况下会对静态文件js,html,gif,png等做内部缓存,这个缓存是在服务器iis进程的内存中的。IIS这么做在很大程度上可以提高静态文件的访问性能,在正常情况下只要静态文件更新了IIS也会更新缓存。但是如果更新的静态文件很多就有可能出现缓存不更新的情况。
会长君
2023/04/26
2.9K0
【缓存】HTML5缓存的那些事
在HTML5出生之前,通常在浏览器(客户端)使用cookies来存储客户端的内容;
前端修罗场
2023/10/07
4151
【缓存】HTML5缓存的那些事
如何优化tomcat配置(从内存、并发、缓存4个方面)优化
  Tomcat内存优化主要是对 tomcat 启动参数优化,我们可以在 tomcat 的启动脚本 catalina.sh 中设置 java_OPTS 参数。    JAVA_OPTS参数说明    -server 启用jdk 的 server 版;    -Xms java虚拟机初始化时的最小内存;    -Xmx java虚拟机可使用的最大内存;    -XX: PermSize 内存永久保留区域    -XX:MaxPermSize 内存最大永久保留区域    服务器参数配置
拓荒者
2019/03/11
2.2K0

相似问题

Javascript -从内存缓存访问对象

15

如何从AWS Lambda访问内存缓存?

16

内存访问和缓存

22

访问内存缓存项

11

毕加索-仅访问内存缓存

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文