以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  统计比同产品上一次交易价格低的数量,怎么统计?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=137531)

--  作者:苍风霁月
--  发布时间:2019/7/8 20:51:00
--  统计比同产品上一次交易价格低的数量,怎么统计?
同一个订单表,记录产品的历史交易明细清单,我想统计最近一次价格比前一次价格低的产品数量,怎么统计?
请高手支招!谢谢!

--  作者:有点蓝
--  发布时间:2019/7/8 21:33:00
--  
请上传具体实例说明
--  作者:苍风霁月
--  发布时间:2019/7/8 22:17:00
--  
我现在想统计:同产品最近一次交易价格比上一次价格降低的产品数量。用select怎么查询?
数据结构大致如下:
产品名称 数量 单价 日期
A 100 4.5 2019.4.5
A 50 4.3 2019.6.7
B 600 34.5 2019.4.5
C 100 200 2019.7.1
B 100 32 2019.3.20
Z 5 1022 2019.4.4
Z 10 1022 2019.6.22



[此贴子已经被作者于2019/7/8 22:39:19编辑过]

--  作者:有点蓝
--  发布时间:2019/7/8 22:33:00
--  
就上面的数据来说需要怎么样的结果?
--  作者:苍风霁月
--  发布时间:2019/7/8 22:42:00
--  
上面数据,结果应该是1

因为A产品,最近的价格比上次4月5日的低,计为1;
B产品,最近的价格比它上一次的高,不计入;
C产品,只有一次,不计入;
Z产品,再次相等,不计入。

--  作者:有点蓝
--  发布时间:2019/7/8 23:47:00
--  
Select count(*) from 
( Select a.* from 表A As a Inner join 
(Select 产品名称,max(日期) As 日期  from 表A group by 产品名称 having count(产品名称) > 1) As b
on a.产品名称 = b.产品名称 where a.日期 = b.日期 
) As c Inner join 
(Select m.* from 表A As m Inner join 
(Select a.产品名称,max(a.日期) As 日期 from 表A As a Inner join 
(Select 产品名称,max(日期) As 日期  from 表A group by 产品名称 having count(产品名称) > 1) As b
on a.产品名称 = b.产品名称 where a.日期 < b.日期 group by a.产品名称
) As n 
on m.产品名称 = n.产品名称 where m.日期 = n.日期 
) As d
on c.产品名称 = d.产品名称 AND c.日期 > d.日期 And c.单价 < d.单价

--  作者:苍风霁月
--  发布时间:2019/7/9 10:56:00
--  
先捋一捋,学习了,非常感谢