以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助] SQL语句求助,结过2小时努力,还是失败 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=114418) |
-- 作者:huangfanzi -- 发布时间:2018/2/5 22:22:00 -- [求助] SQL语句求助,结过2小时努力,还是失败 有一表,表名是 {调价表},结构如下: 生效日期 商品名 价格 合同编号 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("生效日期") & "#)" |
-- 作者:有点蓝 -- 发布时间: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 -- 发布时间: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编辑过]
|
-- 作者:有点蓝 -- 发布时间:2018/2/5 23:19:00 -- 这种无法用sql处理,用代码:http://www.foxtable.com/webhelp/index.htm?page=0000.htm |
-- 作者:有点甜 -- 发布时间:2018/2/6 9:06:00 -- 把今天的日期加进去,就行了,不然你的逻辑有问题。
比如,要查找当前日期的单价,就按商品名分组,加上日期<=当前日期的条件,最后获取倒数第一条记录。
看看这个帖子,分组获取前n行的数据 http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=113873&skin=0
|