Foxtable(狐表)用户栏目专家坐堂 → [求助] SQL语句求助,结过2小时努力,还是失败


  共有2601人关注过本帖树形打印复制链接

主题:[求助] SQL语句求助,结过2小时努力,还是失败

帅哥哟,离线,有人找我吗?
huangfanzi
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1106 积分:8977 威望:0 精华:0 注册:2014/10/25 11:24:00
[求助] SQL语句求助,结过2小时努力,还是失败  发帖心情 Post By:2018/2/5 22:22:00 [只看该作者]

有一表,表名是 {调价表},结构如下:

生效日期      商品名   价格  合同编号
2018-1-1    商品1   100   合同1
2018-1-1    商品2   110   合同1
2018-1-15  商品1   150   合同1
2018-1-15  商品2   160   合同1

目的是用Dim rt As New prt.RenderTable生成个调价报表,生成的样子如下:

商品名  调价前单价  调价后单价
商品1      100           150
商品2      110           160

我目前的做法是 双击一个行号的行头事件,代码中有以下内容:
Dim dr As DataRow
dr = DataTables("调价表").SQLFind("生效日期 < '" & e.Row("生效日期") & "' And 合同编号 = '" & e.Row("合同编号") & "'","生效日期 Desc")
通过上面的代码得到了 当前行的上一个生效日期,然后的S ELECT语句一直试不出来,老师帮我看看

cmd.CommandText = "S elect 商品名,调价前单价,调价后单价 From (S elect 商品名,单价 As 调价后单价,(S elect 单价 From {调价表} Where 合同编号 = '" & e.Row("合同编号") & "' And 生效日期 = #" & dr("生效日期") & "#) As 调价前单价 from {调价表} where 合同编号 = '" & e.Row("合同编号") & "' And 生效日期 = #" & e.Row("生效日期") & "#)"



 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111414 积分:567140 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/2/5 22:58:00 [只看该作者]

Select a.商品名,a.价格 As 调价前,b.价格 As 调价后 from (Select * from {D} where 生效日期 In (Select min(生效日期) from {D} group by 商品名)) As a
Inner join (Select * from {D} where 生效日期 In (Select max(生效日期) from {D} group by 商品名)) As b on a.商品名=b.商品名

 回到顶部
帅哥哟,离线,有人找我吗?
huangfanzi
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1106 积分:8977 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By:2018/2/5 23:07:00 [只看该作者]

老师,不能用 MIN 吧,因为如果表的内容如下:
生效日期      商品名   价格  合同编号
2018-1-1    商品1   100   合同1
2018-1-1    商品2   110   合同1
2018-1-15  商品1   150   合同1
2018-1-15  商品2   160   合同1
2018-2-15   商品1   180   合同1
2018-2-15   商品2   200   合同1

那么我想得到的结果应该是:
商品名  调价前单价  调价后单价
商品1      150           180
商品2      160           200
[此贴子已经被作者于2018/2/5 23:07:18编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111414 积分:567140 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/2/5 23:19:00 [只看该作者]

这种无法用sql处理,用代码:http://www.foxtable.com/webhelp/index.htm?page=0000.htm

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/2/6 9:06:00 [只看该作者]

把今天的日期加进去,就行了,不然你的逻辑有问题。

 

比如,要查找当前日期的单价,就按商品名分组,加上日期<=当前日期的条件,最后获取倒数第一条记录。

 

看看这个帖子,分组获取前n行的数据 http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=113873&skin=0

 


 回到顶部