请高手帮忙,100分,只要能解决,不够再加

hww2004 2008-02-22 05:03:29
有如下表:A,
CUS_NO PRD_NO S_DD UP
====== ======= ========== =====
A BAD001 2007-12-01 2.0
A BAD001 2008-01-21 2.2
A BAD001 2008-02-15 2.1
B BAD001 2008-01-11 2.2
B BAD001 2008-02-22 2.3
C BAD001 2008-02-21 2.2
C BAD001 2008-02-23 2.1
A1 BAD002 2008-01-21 2.2
A2 BAD002 2008-01-21 2.3
A2 BAD002 2008-01-26 2.2
... ... ... ...
例如:希望将BAD001对应CUS_NO中取A,BAD001,2008-02-15(最近日期)的记录
所以,希望最终结果如下:
CUS_NO PRD_NO S_DD UP
====== ======= ========== =====
A BAD001 2008-02-15 2.1
B BAD001 2008-02-22 2.3
C BAD001 2008-02-23 2.1
A1 BAD002 2008-01-21 2.2
A2 BAD002 2008-01-26 2.2
个人感觉比较难描述,就将需求结果列示出来让大家容易看懂。
请专家、高手帮忙!重谢!
...全文
207 26 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
这个问题不值得搂主给100分,下次注意~~~
hww2004 2008-02-26
  • 打赏
  • 举报
回复
青峰-ss:
您回答我的帖子有错误,请指点
-狙击手- 2008-02-25
  • 打赏
  • 举报
回复
select * 
from a t
where not exists(select 1
         from a
         where CUS_NO=t.CUS_NO and PRD_NO=t.PRD_NO and s_dd>t.S_DD)





JiangHongTao 2008-02-25
  • 打赏
  • 举报
回复
LZ 不会结贴我教你:

是这样子的....

在帖子列表中找到本帖,看到帖子最后有“管理”了吗?
第一步: 用你可爱的鼠标点击一下。

进入帖子后找到23楼,一定要记住是23楼,看到得分后面有一个输入框没有?
第二步: 输入100

再往上找,可以看到在1楼的上面有一个广告,广告上面的左边有什么呀?
第三步: 在请输入密码后面的输入框内输入你的CSDN的登陆密码。

往右边看看,是不是有一个按钮呢?
第四步: 点击 结帖
hww2004 2008-02-25
  • 打赏
  • 举报
回复
好,我一定会给分的.
青锋-SS 2008-02-22
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20080110/19/7cb462f1-cac6-4c28-848e-0a879f4fd642.html

这个帖子讲述了详细的结贴方法
青锋-SS 2008-02-22
  • 打赏
  • 举报
回复
* hww2004
* 賤客無名
* 等 级:


发表于:2008-02-22 17:45:0316楼 得分:0
不好意思,我发贴时,没有去看我的分数,现在看才知道有60分,关键是我现在去结贴给分时,系统不让我结贴,请问:我该如何去操作,谢谢。
---------
楼主可能没注意,这个帖子实际是100分的帖子.
青锋-SS 2008-02-22
  • 打赏
  • 举报
回复
不会结贴请参考如下帖子:
http://topic.csdn.net/u/20080110/19/7cb462f1-cac6-4c28-848e-0a879f4fd642.html
liangCK 2008-02-22
  • 打赏
  • 举报
回复
你能发100分帖,加上你现在有60分
就是你发帖之后最少有160分..
现在发帖之后.扣掉100分..还有60分.
正常..
liangCK 2008-02-22
  • 打赏
  • 举报
回复
解决了,请结帖
结帖方式:管理帖子-> 给分-> 输入密码-> 结帖.
谢谢.

请不要点帖子加分.
hww2004 2008-02-22
  • 打赏
  • 举报
回复
不好意思,我发贴时,没有去看我的分数,现在看才知道有60分,关键是我现在去结贴给分时,系统不让我结贴,请问:我该如何去操作,谢谢。
pt1314917 2008-02-22
  • 打赏
  • 举报
回复

-----看错字段了。晕死.
select * from a t where not exists(select 1 from a where CUS_NO=t.CUS_NO and PRD_NO=t.PRD_NO and s_dd>t.S_DD)

--或者

select * from a t where S_DD in(select max(S_DD) from a where CUS_NO=t.CUS_NO and PRD_NO=t.PRD_NO )

--或者

select * from a t where (select count(distinct S_DD) from a where CUS_NO=t.CUS_NO and PRD_NO=t.PRD_NO and s_dd>t.S_DD)=1


hww2004 2008-02-22
  • 打赏
  • 举报
回复
好像 “SDHYLJ 青锋-SS”给的SQL和我写的比较一致。
不知道我是否在哪个地方少考虑了。呵呵
青锋-SS 2008-02-22
  • 打赏
  • 举报
回复
这样更好些
select cus_no,prd_no,s_dd,up
from A
where not exists(select * from A b where a.cus_no=b.cus_no and a.prd_no=b.prd_no and checksum(a.s_dd,a.up)>checksum(b.s_dd,b.up))
order by len(cus_no),cus_no


另外,你看看我9楼的解释.
青锋-SS 2008-02-22
  • 打赏
  • 举报
回复
create table A(CUS_NO varchar(8),PRD_NO varchar(10),S_DD datetime,UP decimal(9,2))
go
insert into A
select 'A','BAD001','2007-12-01',2.0
union select 'A','BAD001','2008-01-21',2.2
union select 'A','BAD001','2008-02-15',2.1
union select 'B','BAD001','2008-01-11',2.2
union select 'B','BAD001','2008-02-22',2.3
union select 'C','BAD001','2008-02-21',2.2
union select 'C','BAD001','2008-02-23',2.1
union select 'A1','BAD002','2008-01-21',2.2
union select 'A2','BAD002','2008-01-21',2.3
union select 'A2','BAD002','2008-01-26',2.3
union select 'A2','BAD002','2008-01-26',2.2
go
select * from A;
select cus_no,prd_no,s_dd,up
from A
where not exists(select * from A b where a.cus_no=b.cus_no and a.prd_no=b.prd_no and checksum(a.s_dd,a.up)>checksum(b.s_dd,b.up))
order by len(cus_no),cus_no
go
drop table A;
go

(11 行受影响)
CUS_NO PRD_NO S_DD UP
-------- ---------- ----------------------- ---------------------------------------
A BAD001 2007-12-01 00:00:00.000 2.00
A BAD001 2008-01-21 00:00:00.000 2.20
A BAD001 2008-02-15 00:00:00.000 2.10
A1 BAD002 2008-01-21 00:00:00.000 2.20
A2 BAD002 2008-01-21 00:00:00.000 2.30
A2 BAD002 2008-01-26 00:00:00.000 2.20
A2 BAD002 2008-01-26 00:00:00.000 2.30
B BAD001 2008-01-11 00:00:00.000 2.20
B BAD001 2008-02-22 00:00:00.000 2.30
C BAD001 2008-02-21 00:00:00.000 2.20
C BAD001 2008-02-23 00:00:00.000 2.10

(11 行受影响)

cus_no prd_no s_dd up
-------- ---------- ----------------------- ---------------------------------------
A BAD001 2008-02-15 00:00:00.000 2.10
B BAD001 2008-02-22 00:00:00.000 2.30
C BAD001 2008-02-23 00:00:00.000 2.10
A1 BAD002 2008-01-21 00:00:00.000 2.20
A2 BAD002 2008-01-21 00:00:00.000 2.30

(5 行受影响)

hww2004 2008-02-22
  • 打赏
  • 举报
回复
SDHYLJ 青锋-SS
select * from A (此处添加a)where not exists(select * from A b where a.cus_no=b.cus_no and a.prd_no=b.prd_no and a.s_dd <b.s_dd) order by len(cus_no),cus_no
即可。谢谢你。


真不知道如何给分合适。
heshengfen123 2008-02-22
  • 打赏
  • 举报
回复
select * from a a1 
where a1.s_dd=(select max(a2.s_dd) from a a2 where a2.cus_no=a1.cus_no)
青锋-SS 2008-02-22
  • 打赏
  • 举报
回复
3楼的回复,如果存在如下情况
create table tb(CUS_NO CHAR(2),PRD_NO CHAR(6),S_DD DATETIME,UP DECIMAL(10,2))
INSERT INTO TB SELECT 'A' , 'BAD001' , '2007-12-01' , 2.0
INSERT INTO TB SELECT 'A' , 'BAD001' , '2008-01-21' , 2.2
INSERT INTO TB SELECT 'A' , 'BAD001' , '2008-02-15' , 2.1
INSERT INTO TB SELECT 'B' , 'BAD001' , '2008-01-11' , 2.2
INSERT INTO TB SELECT 'B' , 'BAD001' , '2008-02-22' , 2.3
INSERT INTO TB SELECT 'C' , 'BAD001' , '2008-02-21' , 2.2
INSERT INTO TB SELECT 'C' , 'BAD001' , '2008-02-23' , 2.1
INSERT INTO TB SELECT 'A1' , 'BAD002' , '2008-01-21' , 2.2
INSERT INTO TB SELECT 'A2' , 'BAD002' , '2008-01-21' , 2.3
INSERT INTO TB SELECT 'A2' , 'BAD002', '2008-01-26' , 2.3 --多增加一条记录
INSERT INTO TB SELECT 'A2' , 'BAD002', '2008-01-26' , 2.2

SELECT *
FROM tb A
WHERE NOT EXISTS(SELECT 1 FROM tb WHERE CUS_NO=A.CUS_NO AND S_DD>A.S_DD)

DROP TABLE tb
则存在问题
liangCK 2008-02-22
  • 打赏
  • 举报
回复
给我70,,背着灵魂漫步30
就行了.
liangCK 2008-02-22
  • 打赏
  • 举报
回复
估计要快点结.不然有人抢分的.
加载更多回复(6)

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧