
请教一个SQL语句问题,在价格表中,每个物料代码都会有多个价格记录,但日期不同,
5个回答
展开全部
先取出排倒数第二的日期。然后作为条件取出价格。写在一个里面就行。
追问
如何取出这个时间排第二的记录呢
追答
试试dense_rank。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-05-20
展开全部
CREATE TABLE test_price (
item varchar(10),
itemPrice INT,
price_date DATE
);
INSERT INTO test_price VALUES('苹果', 5, TO_DATE('2013-01-01', 'YYYY-MM-DD'));
INSERT INTO test_price VALUES('苹果', 6, TO_DATE('2013-03-01', 'YYYY-MM-DD'));
INSERT INTO test_price VALUES('苹果', 7, TO_DATE('2013-05-01', 'YYYY-MM-DD'));
INSERT INTO test_price VALUES('桔子', 3, TO_DATE('2013-02-01', 'YYYY-MM-DD'));
INSERT INTO test_price VALUES('桔子', 4, TO_DATE('2013-04-01', 'YYYY-MM-DD'));
INSERT INTO test_price VALUES('桔子', 5, TO_DATE('2013-05-01', 'YYYY-MM-DD'));
SELECT
item,
itemPrice,
price_date
FROM
(
SELECT
ROW_NUMBER() OVER(PARTITION BY item ORDER BY price_date DESC) AS NO,
test_price.*
FROM
test_price
)
WHERE
no = 2;
查询结果:
ITEM ITEMPRICE PRICE_DATE
-------------------- ---------- ----------
桔子 4 01-4月 -13
苹果 6 01-3月 -13
追问
非常感谢各位的回复,谢谢!我的这张价格表中还有“供应商”字段,每个物料代码每个供应商都会有多笔价格记录,包括过期的价格及最新的价格,按各位提示的方法,我取出倒数第二个日期的价格是可以的,但是分不了供应商,我现在还要按供应商来取倒数第二个价格,即,每一个供应商的,倒数第二次日期的价格。谢谢了!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select * from (select row_number() OVER(ORDER BY 日期 DESC) as rownumber,* from 表名 ) t WHERE rownumber BETWEEN 2 AND 2
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先按物料代码、日期排序,再取第二条数据。
追问
怎么取第二条数据呢?
追答
select code, max(x.insert_time)
from TEST11 x
where 1 = 1
and not exists (select *
from (select CODE, MAX(T.INSERT_TIME) AS TIME1
from TEST11 T
group by T.CODE) y
where x.code = y.code
and y.time1 = x.insert_time)
group by x.code
union
select *
from test11 x
where x.code =
(select t.code from test11 t group by t.code having count(1) = 1);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
--回答了3条记录 竟然没有符合楼主要求的 此刻我不得不适当的出现一下了
--有问题 欢迎追问
select * from (select row_number() OVER(PARTITION by 物质代码 ORDER BY 日期 DESC) as bz,* from 表名 ) aa WHERE aa.bz= 2
--有问题 欢迎追问
select * from (select row_number() OVER(PARTITION by 物质代码 ORDER BY 日期 DESC) as bz,* from 表名 ) aa WHERE aa.bz= 2
追问
非常感谢各位的回复,谢谢!我的这张价格表中还有“供应商”字段,每个物料代码每个供应商都会有多笔价格记录,包括过期的价格及最新的价格,按各位提示的方法,我取出倒数第二个日期的价格是可以的,但是分不了供应商,我现在还要按供应商来取倒数第二个价格,即,每一个供应商的,倒数第二次日期的价格。谢谢了!
追答
就按照我这个就可以了 把物质代码换成供应商 就可以了
select * from (select row_number() OVER(PARTITION by 物质代码 ORDER BY 日期 DESC) as bz,* from 表名 ) aa WHERE aa.bz= 2
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |