mysql - 仅显示价格满足条件的行(与最近的价格行相比)
问题描述
我有 2 张表: 带有硬币名称和当前价格的硬币 带有用户设置警报的警报
我想显示触发警报的结果,
即如果硬币蛋糕达到 21 警报“H 20”(更高的 20)将触发
如果硬币蛋糕低于 11 警报“L 11) (lower 11) 将触发
我可以用很多查询来做,但我只想用一个来做......
问题:
- 仅获取最近日期的硬币价格(来自表 COINS)
- 获得比较警报集和当前价格的结果
table ALERTS
id | user | coin | se | pricealert
----------------------------------------
1 | 15 | cake | H | 20
2 | 15 | cake | L | 11
3 | 21 | sbdo | H | 8000
4 | 15 | bnb | H | 300
5 | 21 | bnb | H | 280
7 | 15 | bnb | L | 200
8 | 15 | mds | L | 5000
table COINS (* most recent date)
coin | value | data
---------------------------------
cake | 12 | 2021-03-22
cake | 13 | 2021-03-23
**cake | 14 | 2021-03-24**
bnb | 250 | 2021-03-22
bnb | 270 | 2021-03-23
**bnb | 330 | 2021-03-24**
mds | 5900 | 2021-03-23
**mds | 4700 | 2021-03-24**
sbdo | 6000 | 2021-03-23
**sbdo | 6700 | 2021-03-24**
wanted RESULTS
id | user | coin | se | pricealert | currentprice
4 | 15 | bnb | H | 300 | 330
5 | 21 | bnb | H | 280 | 330
8 | 15 | mds | L | 5000 | 4700
我可以考虑一一查询,但我只想在 1 次查询中进行查询,这是为了获取硬币的最新值(我认为不是最佳解决方案)
SELECT MAX(data), valore, coin
FROM coins WHERE data>(NOW() - INTERVAL 24 HOUR)
GROUP BY coin
这是来自选择结果?
SELECT *
FROM results
WHERE (currentprice<pricealert and se='L')
OR (currentprice>pricealert and se='H')
解决方案
这是一种方法:
select* from (
select *, rank() over (partition by coin order by date desc) rn
from coins
) c
join alerts a
on a.coin = c.coin
and rn = 1
and (
(c.value > a.pricealert and a.se='H')
OR (c.value < a.pricealert and a.se='L')
)
好像你的 mysql 版本太旧,不支持 row_number 或 rank() 窗口函数,所以你可以使用下面的查询:
select c.*
from (
select coin, max(date) date
from coins
group by coin
) mc
join coin on c.coin = mc.coin and c.date = mc.date
join alerts a on a.coin = c.coin
and ((c.value > a.pricealert and a.se='H')
OR (c.value < a.pricealert and a.se='L')
)
推荐阅读
- javascript - 无法在 React 上从我的桌面加载图像
- c# - 了解 Azure Functions HttpTrigger 缩放算法
- r - 按均值排序分组散点图
- java - 从java 8流中的列表中过滤值
- powershell - 为什么“退出”不显示为 PowerShell 命令?
- json - AmCharts4 - 无法加载文件 - 从 SQL 数据库生成的外部 JSON 文件
- react-native - React Native:在 Animated.View 中调用 onPress 函数时禁用动画
- c++ - 是否可以在不指定类型的情况下将变量值打印到调试?
- arrays - 如何在 redis laravel 中的数组中缓存特定对象,然后将缓存与数组一起返回
- java - Pyspark:从 Oracle 读取 XML 时找不到 oracle.xdb.XMLType 类