| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 769 人关注过本帖
标题:请教一句SQL语句。
只看楼主 加入收藏
yafengliang
Rank: 1
等 级:新手上路
帖 子:73
专家分:0
注 册:2016-2-21
结帖率:60%
  问题点数:0  回复次数:27   
请教一句SQL语句。
xs表有单号,客户,日期;mx表有单号,产品,单价等字段。两个表以单号关联,相同客户、相同产品在不同日期有不同的单价,相同产品不同客户单价也不相同。请教查询各客户购买相应产品日期最近的三次记录单价,这个SQL语句如何写。

[此贴子已经被作者于2018-2-6 12:29编辑过]

2018-02-05 18:11
gpchxy
Rank: 1
等 级:新手上路
帖 子:4
专家分:7
注 册:2018-1-31
  得分:0 
select * top 3 distinct from xs;
group by 客户,产品;
order by 日期 desc
2018-02-06 00:07
yafengliang
Rank: 1
等 级:新手上路
帖 子:73
专家分:0
注 册:2016-2-21
  得分:0 
回复 2楼 gpchxy
谢谢,如果是在两个表查询呢?
2018-02-06 12:31
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:78
帖 子:2506
专家分:6092
注 册:2015-3-25
  得分:0 
create table 订单(客户 c(10),名称 c(10),单价 n(10,2),日期 d)
insert into 订单 ;
select '客户1','物料1',10,{^2018-01-05} union all ;
select '客户1','物料1',10,{^2018-01-04} union all ;
select '客户1','物料1',10,{^2018-01-03} union all ;
select '客户1','物料1',10,{^2018-01-02} union all ;
select '客户1','物料1',10,{^2018-01-01} union all ;
select '客户1','物料1',10,{^2018-01-06} union all ;
select '客户1','物料1',10,{^2018-01-06} union all ;
select '客户1','物料1',10,{^2018-01-07} union all ;
select '客户1','物料2',10,{^2018-01-07} union all ;
select '客户2','物料1',10,{^2018-01-05} union all ;
select '客户2','物料1',10,{^2018-01-04}

select a2.* from (select a1.客户,a1.名称,a1.日期,(select count(日期) as 排名 from 订单 where a1.客户=客户 and a1.名称=名称 and a1.日期<=日期) as 排名 ;
                  from 订单 a1) a2 ;
where 排名<=3
有个缺点,当最后1天有4条以上的同样的记录时,好像查不到

[此贴子已经被作者于2018-2-6 17:27编辑过]

2018-02-06 17:24
yafengliang
Rank: 1
等 级:新手上路
帖 子:73
专家分:0
注 册:2016-2-21
  得分:0 
回复 4楼 mywisdom88
有两个表
2018-02-06 17:47
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:版主
威 望:341
帖 子:11251
专家分:42288
注 册:2006-5-13
  得分:0 
为了方便理解,建议分两步走:先生成一个带有日期的mx临时表,然后再对这个表进行筛选。

活到老,学到老! http://www.qs98.com E-mail:hu-jj@21cn.com
2018-02-07 07:57
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:78
帖 子:2506
专家分:6092
注 册:2015-3-25
  得分:0 
以下是引用yafengliang在2018-2-6 17:47:00的发言:

有两个表

分别把你2个表的字段列出来,同时,他们的关联关系
2018-02-07 12:02
yafengliang
Rank: 1
等 级:新手上路
帖 子:73
专家分:0
注 册:2016-2-21
  得分:0 
回复 4楼 mywisdom88
你好,我现在合成为一个临时表,采用你的查询方法。就出现你说的问题,记录大于4条时,查不出来。请问能解决吗?
2018-02-10 00:22
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:78
帖 子:2506
专家分:6092
注 册:2015-3-25
  得分:0 
回复 8楼 yafengliang
同1天,有多个相同客户和物料的记录,基本上是不会出现的。
一般不会影响,但也是要解决问题。
解决办法是,把日期字段改为 日期时间 字段,就可以了。
2018-02-10 13:38
yafengliang
Rank: 1
等 级:新手上路
帖 子:73
专家分:0
注 册:2016-2-21
  得分:0 
回复 9楼 mywisdom88
我把日期改为datetime型,同时把'排名where <= 3'改为‘排名where <= 4’,是能够找出有四条记录的,但记录有4条的就没有按1234进行排名。现在一个客户最多有对应10条物料记录的,请问能解决吗?


[此贴子已经被作者于2018-2-10 14:31编辑过]

附件: 您没有浏览附件的权限,请 登录注册
2018-02-10 14:08







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029259 second(s), 8 queries.
Copyright©2004-2018, BCCN.NET, All Rights Reserved