我有一个表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
对于 ABC
和 19-7-2011
,上面将给出 17-7-2011
和随后的 10 个行行(20-7-2011
、21-7-2011
等)
关于mysql - 给定一个日期,在 MySQL 非线性中查找上一个和/或当前和下一个 x# 日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6812574/