gpt4 book ai didi

MySQL匹配基于日期的第一个值实例

转载 作者:行者123 更新时间:2023-11-29 15:21:39 25 4
gpt4 key购买 nike

我有一个包含股票市场数据(开盘价、最高价、最低价、收盘价)的表格,但日期顺序是随机的:

Date    Open    Hi  Lo  Close
12/10/2019 313.82 314.54 312.81 313.58
11/22/2019 311.09 311.24 309.85 310.96
11/25/2019 311.98 313.37 311.98 313.37
11/26/2019 313.41 314.28 313.06 314.08
11/27/2019 314.61 315.48 314.37 315.48
11/29/2019 314.86 315.13 314.06 314.31
12/2/2019 314.59 314.66 311.17 311.64
12/3/2019 308.65 309.64 307.13 309.55

我在 PHP 变量中有另一个值(例如 $BaseValue),以及开始日期和结束日期($startdt 和 $enddt)。

1) 我的要求是,如果 HI 列中的值超过给定开始日期和结束日期之间按时间顺序排列的第一个日期的 $BaseValue,则从 HI 列中获取该值。

例如,如果 $BaseValue=314、startdt=11/22、enddt=12/2,那么我想检索日期 (11/26/19),因为它是 Hi 值的最早日期(314.28) 超出了给定日期范围内的 $Basevalue。 select 语句应返回 Hi 值 (314.28) 和日期 (11/26/19)。

2) 此外,我还需要在给定的日期持续时间内从 HI 列中检索最高值和日期。在上述场景中,它应该返回 315.48 和对应的日期 11/27。

该表格不是按时间顺序排列的 - 它是随机填充的。

使用 MAX 函数及其各种组合,我根本无法获得第一个查询。让我想知道这在 SQL 中是否可能。

虽然第二个很简单,但我想知道将两个查询合并并一次获取四个值是否更有效且更简单。

关于如何满足此要求,有什么想法吗?

谢谢

最佳答案

您可以使用两个子查询进行过滤,每个条件一个子查询,例如:

select t.*
from mytable t
where
t.date = (
select min(t1.date)
from mytable t1
where t1.date between :datedt and :enddt and t1.hi >= :basevalue
)
or t.hi = (
select max(t1.hi)
from mytable t1
where t1.date between datedt and :enddt and t1.hi >= :basevalue
)

另一个选项是使用 orer bylimit联合两个查询:

(
select t.*
from mytable
where t.date between :datedt and :enddt and t1.hi >= :basevalue
order by t.date
limit 1
)
union
(
select t.*
from mytable t
where t.date between :datedt and :enddt and t1.hi >= :basevalue
order by t.hi desc, t.date
limit 1
)

请注意,这两个查询所做的事情并不完全相同。如果该时间段内存在最高 hi 的平局,第一个查询将返回所有平局,而第二个查询将选择最早的平局。您可以决定哪种解决方案更适合您的用例。

关于MySQL匹配基于日期的第一个值实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59346138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com