Foxtable(狐表)用户栏目专家坐堂 → 老大 帮我看个SQL语句 取同一客户 同一产品的最后记录


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

主题:老大 帮我看个SQL语句 取同一客户 同一产品的最后记录

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


加好友 发短信
等级:七尾狐 帖子:1731 积分:11255 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2013/3/19 8:58:00 [显示全部帖子]

这个必须用inner join ,昨天我发的那帖子你参考下,同样地问题,仔细看看inner join后面的语句,修改下应该就可以了

http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=29969&skin=0


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


加好友 发短信
等级:七尾狐 帖子:1731 积分:11255 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2013/3/19 10:50:00 [显示全部帖子]

这个算查询表吗?

那再变通下,用这个SQL,cmd语句获取DT,再获取每行的identify,用in语句加载获得的Iidentify集合到Table就可以了,原来我就是这么做的

 


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


加好友 发短信
等级:七尾狐 帖子:1731 积分:11255 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2013/3/19 11:02:00 [显示全部帖子]

以下是引用muhua在2013-3-19 10:53:00的发言:

Tables("窗口1_Table1").Fill("Select 单价,折扣,数量,日期,产品,客户,雇员 From {订单} a where a.日期 in (Select max(日期)  From {订单} Group By 产品)","Sale",True)

 

这个也试过,但是不是他要的结果,如果把后面的True改为False 则出错了。

Dim strIn As String = ""

Dim cmdText As String = ""
Dim cmd As new SQLCommand
cmd.C

cmd.CommandText = "Select  * From {订单} a INNER JOIN (Select Max(日期) As 日期 From {订单} Group By 产品) b on a.日期 = b.日期"
Dim dt As DataTable = cmd.ExecuteReader
For Each dr As DataRow In dt.DataRows
    strIn = strIn & "'" & dr("_Identify") & "',"
Next
strIn = strIn.TrimEnd(",")
cmdText = "Select 单价,折扣,数量,日期,产品,客户,雇员,日期 from {订单} where [_Identify] In (" & strIn & ")"

Tables("窗口1_Table1").Fill(cmdText,"Sale",false)

如果是数值,去掉'

[此贴子已经被作者于2013-3-19 11:07:19编辑过]

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


加好友 发短信
等级:七尾狐 帖子:1731 积分:11255 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2013/3/19 11:26:00 [显示全部帖子]

请查看效果,没有问题,这个例子没有_Identify列的,编号列是数值型

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:解决问题.rar

 

Dim strIn As String = ""
Dim cmdText As String = ""
Dim cmd As new SQLCommand
cmd.C
cmd.CommandText = "Select * From {订单} a INNER JOIN (Select 产品,Max(日期) As 日期 From {订单} Group By 产品) b on a.日期 = b.日期 and a.产品 = b.产品"
Dim dt As DataTable = cmd.ExecuteReader
For Each dr As DataRow In dt.DataRows
    strIn = strIn & dr("编号") & ","
Next
strIn = strIn.TrimEnd(",")
cmdText = "Select * from {订单} where 编号 In (" & strIn & ") order by 客户"
Tables("窗口1_Table1").Fill(cmdText,"Sale",False)
Tables("窗口1_Table1").AllowEdit = True


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


加好友 发短信
等级:七尾狐 帖子:1731 积分:11255 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2013/3/19 12:57:00 [显示全部帖子]

以下是引用blackzhu在2013-3-19 12:35:00的发言:
  加载时加载 但是好像有重复

应该不会有重复。你先检查下b语句是否已经造成重复了,有的话再加条件,没有的话再看看最后的限定条件是否不足~~

客户,产品,时间,再把语句修改下,我实际测试了,以下4行代码就能够保存了,不需要转换,请大家也测试下

Dim cmdText As String = ""
cmdText = "Select * From {订单} a INNER JOIN (Select 客户,产品, Max(日期) As 日期  From {订单} Group By 客户,产品) b on a.日期 = b.日期 And a.产品 = b.产品 and a.客户 = b.客户"
Tables("窗口1_Table1").Fill(cmdText,"Sale",False)
Tables("窗口1_Table1").AllowEdit = True


 

[此贴子已经被作者于2013-3-19 13:36:44编辑过]

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


加好友 发短信
等级:七尾狐 帖子:1731 积分:11255 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2013/3/19 16:38:00 [显示全部帖子]

以下是引用RandyBoy在2013-3-19 14:32:00的发言:

以上语句运行结果正确,是因为现有数据环境中,同一客户同一产品同一日期只有一笔记录

那你如何去区分每笔记录的时间先后顺序那?你能区别的话,那你继续添加条件取值。

我猜测如果只是按照你添加到记录系统的顺序的话,你只需要在添加一句max(编号) as 编号 应该就可以了把

cmdText = "Select * From {订单} a INNER JOIN (Select 客户,产品, Max(日期) As 日期 ,max(编号) as 编号) From {订单} Group By 客户,产品) b on a.日期 = b.日期 And a.产品 = b.产品 and a.客户 = b.客户 and a.编号 = b.编号"

 

以上我想应该已经可以简化成如下

cmdText = "Select * From {订单} a INNER JOIN (Select 客户,产品, Max(日期) As 日期 ,max(编号) as 编号) From {订单} Group By 客户,产品) b on  a.编号 = b.编号 group by a.客户,a.产品,a.日期"


 

[此贴子已经被作者于2013-3-19 17:02:34编辑过]

 回到顶部