mysql - 给定一个日期,在 MySQL 非线性中查找上一个和/或当前和下一个 x# 日期

标签 mysql sql stored-procedures date

我有一个表code_prices,看起来像这样:

CODE   |   DATE     | PRICE
ABC    | 25-7-2011  |  2.81
ABC    | 23-7-2011  |  2.52
ABC    | 22-7-2011  |  2.53
ABC    | 21-7-2011  |  2.54
ABC    | 20-7-2011  |  2.58
ABC    | 17-7-2011  |  2.42
ABC    | 16-7-2011  |  2.38

数据集的问题是日期之间存在差距,因此我可能想查找商品 ABC 在 18 日的价格,但没有条目,因为该商品未在该日期售出。所以我想返回价格的最新历史条目。

假设我在 2011 年 7 月 19 日查询,我想返回 17 日的条目,然后返回接下来的 10 个可用条目。

但是,如果我在 20 日查询 ABC 的价格,我想返回 20 日的价格以及之后的下 10 个价格...

在 SQL 语句或使用存储过程中,最有效的方法是什么?

我可以想到只编写一个将日期作为参数的存储过程,然后查询 DATE >= QUERY-DATE 按日期排序的所有行,然后选择 11 个项目(通过限制)。然后基本上我需要查看该集合是否包含当前日期,如果它包含则返回,否则我将需要返回这 11 个中的 10 个最近的整体,并且还对表进行另一个查询以通过获取返回上一个条目date < QUERY-DATE 的最大日期。我在想可能有更好的方法,但是我不是 SQL 专家(显然)...

谢谢!

最佳答案

这是一个特定的代码:

SELECT code, `date`, price
FROM code_prices
WHERE code = @inputCode
  AND `date` >=
        ( SELECT MAX(`date`)
          FROM code_prices
          WHERE code = @inputCode
            AND `date` <= @inputDate
        )
ORDER BY `date`
LIMIT 11

对于 ABC19-7-2011,上面将给出 17-7-2011 和随后的 10 个行行(20-7-201121-7-2011 等)

关于mysql - 给定一个日期,在 MySQL 非线性中查找上一个和/或当前和下一个 x# 日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6812574/

相关文章:

sql-server - 如何正确使用 EXISTS 子句

java - 在 mySQL 工作台中创建过程时出错

sql - Grails i18n。使用一个SQL select查询域类和翻译

sql - 我可以跳过我选择的连接吗?

MySQL删除重复问题

PHP if mysqli查询语句

sql - 查找记录数的比率

sql - 使用 Apache Derby 转换日期

mysql - 带和不带窗口函数的最小值和最大值

mysql - 如何绕过 '--' 运算符仅适用于变量或属性