2 u013181082 u013181082 于 2016.09.15 23:20 提问

SQL 查询语句问题,请各位指教。 20C

商品当日价格表Table中有属性id,Date,price,主键为(id,Date),求商品当日
价格和前一交易日涨幅。原本我自己写的如下:
select t1.id,t1."Date",((a.price-b.price)/b.price
from ASX a,ASX b
where b."Date" = a."Date"-1 and a.Code = b.Code;
后来发现某一商品并不一定连续每天都出售,例如1号2号出售,5号6号出售但是3号4号没有开卖,所以不能直接取a."Date"-1,应该怎么表示a."Date"的上一个出售日。求各位指教

4个回答

qq_29594393
qq_29594393   Ds   Rxr 2016.09.15 23:26

按时间排序order by date,top(2),取最前的两个,比较就可以了

u013181082
u013181082 回复当作看不见: 我的意思是前后两个交易日期不一定是连续的,例如周末不营业。我上面那个b.date=a.date-1结果会少掉一下不连续的日期
大约一年之前 回复
qq_29594393
qq_29594393 回复twostorytown: 你不是要比较涨幅吗?日期最大的两个比较不就好,如果需要取全部的话,去掉top,
大约一年之前 回复
u013181082
u013181082 额,我要求出每一天的信息,top(2)不是只能去取最大的或者最小的两天吗。。
大约一年之前 回复
buquan4041
buquan4041   2016.09.16 11:12

你desc排序时间然后取前两个,完美解决。

liang_shui_guo
liang_shui_guo   2016.09.18 18:18

分开算,先用desc取出最近两天的价格,然后计算涨幅

mysongchao123
mysongchao123   2016.09.21 15:29

这个需要注意的一点就是你数据库里日期列的格式,一定要是DATE格式的才可以用order by xxx desc来解决,如果是字符串格式的话,就不能用desc了,
因为2016/9/10一定大于2016/10/10号,会出错,如果是字符串格式,就一定要求数据库里日期列的格式为yyyy/MM/dd格式,然后用desc就没有问题了

Csdn user default icon
上传中...
上传图片
插入图片