我管理的系统记录了库存商品的价格和数量的变化。
表格如下所示:
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)
我希望这很清楚,因为我知道这不是一个容易的话题。
期待听到您的评论。
提前致谢,
ħ
答案 0 :(得分:0)
免责声明:我不熟悉高超音速sql方言。
以下内容可以帮助您获得所需的内容,它似乎可以在mysql上获得您想要的内容。
select subq.*,
st_before.quantity QUANTITY_BEFORE,
st_after.quantity QUANTITY_AFTER,
st_before.price PRICE_BEFORE,
st_after.price PRICE_AFTER
from (
select
max_id stock_id,
date_before,
date_after
from
(
SELECT id max_id,max(date) date_after
FROM STOCK
GROUP BY ID
) mx
join
(
SELECT stock.id min_id,min(stock.date) date_before
FROM STOCK
join (
SELECT id,max(date) date_after
FROM STOCK
GROUP BY ID
) mmx
on stock.id = mmx.id
and datediff(mmx.date_after, stock.date) < 1
GROUP BY stock.ID
) mn
on mx.max_id = mn.min_id
) subq
join stock st_before
on st_before.id = subq.stock_id
and st_before.date = subq.date_before
join stock st_after
on st_after.id = subq.stock_id
and st_after.date = subq.date_after
order by stock_id
;