【发布时间】:2013-05-09 09:08:01
【问题描述】:
我管理一个系统,记录其库存商品价格和数量的变化。
表格如下所示:
STOCK(ID, DATE, QUANTITY, PRICE)
(1, 2013.01.07 00:00, 9, 6)
(1, 2013.01.02 00:00, 9, 5)
(1, 2013.01.01 00:00, 10, 5)
(2, 2013.01.07 22:00, 20, 10)
(2, 2013.01.07 00:00, 24, 10)
(3, 2013.01.02 00:00, 9, 5)
(3, 2013.01.01 00:00, 10, 5)
返回 1 天期限内更改的查询应返回项目的最新历史记录信息以及与其相差最多 1 天的历史记录信息(如果没有,则返回自身):
STOCK(ID, DATE_BEFORE, DATE_AFTER, QUANTITY_BEFORE, QUANTITY_AFTER, PRICE_BEFORE, PRICE_AFTER)
(1, 2013.01.07 00:00, 2013.01.07 00:00, 9, 9, 6, 6)
(2, 2013.01.07 00:00, 2013.01.07 22:00, 24, 20, 10, 10)
(3, 2013.01.01 00:00, 2013.01.02 00:00, 10, 9, 5, 5)
返回 1 周内更改的查询应返回项目的最新历史记录信息以及与其相差最多 7 天的历史记录信息(如果没有,则返回自身):
STOCK(ID, DATE_BEFORE, DATE_AFTER, QUANTITY_BEFORE, QUANTITY_AFTER, PRICE_BEFORE, PRICE_AFTER)
(1, 2013.01.01 00:00, 2013.01.07 00:00, 10, 9, 5, 6)
(2, 2013.01.07 00:00, 2013.01.07 22:00, 24, 20, 10, 10)
(3, 2013.01.01 00:00, 2013.01.02 00:00, 10, 9, 5, 5)
我希望这足够清楚,因为我知道这不是一个容易的话题。
期待听到你们的声音。
提前致谢,
H
【问题讨论】:
-
您使用的是哪个数据库,到目前为止您尝试过什么?
-
什么是表唯一键?对于“一天”结果,您似乎缺少 ID=1 的第 2 行和第 3 行的输出行
-
@Ian Kenney 你好。我正在使用超音速 2.2.9
-
@gbn 关于PK,很抱歉我忘记了。有一个顺序,示例记录将是数字 1 到 7 的键。结果没有丢失。该查询仅考虑给定 STOCK.ID 的最新记录以获取 AFTER_* 信息。
-
@Ian Kenney 到目前为止,我一直在尝试使用子查询来做到这一点,但到目前为止还没有提出任何有用的东西,我们正在讨论页面长查询......