请教一个SQL语句问题,在价格表中,每个物料代码都会有多个价格记录,但日期不同,

如何通过sql语句,取出倒数第二个日期的那一笔价格记录呢?(也就是最新价格记录的上一个)。... 如何通过sql语句,取出倒数第二个日期的那一笔价格记录呢?(也就是最新价格记录的上一个)。 展开
 我来答
满地图找牙
2013-05-20 · TA获得超过349个赞
知道小有建树答主
回答量:404
采纳率:100%
帮助的人:224万
展开全部
先取出排倒数第二的日期。然后作为条件取出价格。写在一个里面就行。
追问
如何取出这个时间排第二的记录呢
追答
试试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

追问
非常感谢各位的回复,谢谢!我的这张价格表中还有“供应商”字段,每个物料代码每个供应商都会有多笔价格记录,包括过期的价格及最新的价格,按各位提示的方法,我取出倒数第二个日期的价格是可以的,但是分不了供应商,我现在还要按供应商来取倒数第二个价格,即,每一个供应商的,倒数第二次日期的价格。谢谢了!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友f9f2af3
2013-05-20 · TA获得超过357个赞
知道小有建树答主
回答量:385
采纳率:0%
帮助的人:245万
展开全部
select * from (select row_number() OVER(ORDER BY 日期 DESC) as rownumber,* from 表名 ) t WHERE rownumber BETWEEN 2 AND 2
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
vivibo217
2013-05-20
知道答主
回答量:22
采纳率:0%
帮助的人:19.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);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
17号观察室
推荐于2020-12-07 · TA获得超过5730个赞
知道大有可为答主
回答量:3666
采纳率:66%
帮助的人:1444万
展开全部
--回答了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
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式