gpt4 book ai didi

sql - 根据以前的日期查询带有参数的记录

转载 作者:行者123 更新时间:2023-12-04 18:24:28 27 4
gpt4 key购买 nike

我的表格是这样的:

Id, Date, Open,High,Low,Close,VOlume,OI

我正在使用 MS Access,我需要这样查询:

Select those dates(D), where Close on D-2> D-3 and D-1>D-2

那么,我该如何形成一个查询呢?通常,您可以将其视为使用其参数对先前记录的查询。

索罕

最佳答案

SELECT
[Today].*
FROM
(
(
MyTable AS [Today]
INNER JOIN
MyTable AS [TodayMinus1]
ON [TodayMinus1].Date = DATEADD("d", -1, [Today].Date)
AND [TodayMinus1].ID = [Today].ID
)
INNER JOIN
MyTable AS [TodayMinus2]
ON [TodayMinus2].Date = DATEADD("d", -2, [Today].Date)
AND [TodayMinus2].ID = [Today].ID
)
INNER JOIN
MyTable AS [TodayMinus3]
ON [TodayMinus3].Date = DATEADD("d", -3, [Today].Date)
AND [TodayMinus3].ID = [Today].ID
WHERE
[TodayMinus1].Close > [TodayMinus2].Close
AND [TodayMinus2].Close > [TodayMinus3].Close

编辑注意详细说明三个连接的使用。

像 SAS 这样的系统作为显式循环运行,您可以根据循环先前迭代获得的值或结果进行计算。

然而,SQL 表示为集合而不是循环,然后优化器会估计算法上最有效的方法来完成该逻辑。然而,这个基于集合的表达式,传统上意味着你不能说“三个记录之前”,因为集合没有明确的顺序,或者它被处理的顺序(并行可能意味着它在 block 中处理,索引可能意味着它以不同的顺序处理,等等)。

这意味着您需要一种基于集合的机制来获取要比较的记录。在这种情况下,如果你想比较“今天”和“昨天”,每一个都是你在比较之前连接在一起的集合。您总共有 4 天不同的日子,所以要将 4 组不同的组合放在一起进行比较。从严格意义上讲,这就是关系数据库的基于集合的表达式的工作方式......

但是,ANSI-SQL 现在确实包括窗口函数,例如 LAG,它允许您根据需要使用基于集合的符号。由于各种原因,它尚未广泛实现。由于 ACCESS 是一个轻量级数据库(与 MySQL、SQL Server、Oracle 等相比),我不希望有领先的功能。

关于sql - 根据以前的日期查询带有参数的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6690460/

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