请问下列的SQL语句有何不妥?应该如何写呢

jonsonzxw 2003-03-13 10:30:00
Select Top 1 PictureID,Caption from Pictures where PictureID In(Select PictureID from PictureDetails) and AuditMark='1' and left(PictureID,2)='00' and Caption like '%" + Request.Params["cont"] + "%' or Contents like '%" + Request.Params["cont"] + "%' Group by Left(PictureID,6) order by AuditDate Desc

------------------------------------------------------------------
说明: 主表Pictures有字段PictureID,Caption,Contents,AuditMark,AuditDate....
子表PictureDetails有字段PictureID...它与主表的PictureID关联

PictureID共有12位长(VARCHAR),前6位表示所属分类,我的目的是要求取得这样的记录:对于PictureID前6位相同的记录,只需要最新的一条记录(即AuditDate Desc)

所以我用到了Top 1, 分组Group by Left(PictureID,6) ,排序order by AuditDate Desc,但执行时这个语句老是通不过,不知如何写才能满足我的要求.

谢谢!!!
...全文
46 63 打赏 收藏 转发到动态 举报
写回复
用AI写文章
63 条回复
切换为时间正序
请发表友善的回复…
发表回复
jonsonzxw 2003-03-14
  • 打赏
  • 举报
回复
也很贪,还有大把分数等你拿,结了!
jonsonzxw 2003-03-14
  • 打赏
  • 举报
回复
To SophiaWang
我要结贴了,如果你要数据库版块的80分的话,请马下来顶一下贴子
http://expert.csdn.net/Expert/topic/1525/1525361.xml?temp=.9304926

如果你想要.net版块的80分的话,请马下来顶一下贴子
http://expert.csdn.net/Expert/topic/1449/1449934.xml?temp=.1145746

我在线等你来领分!
SophiaWang 2003-03-14
  • 打赏
  • 举报
回复
我其实是在数据库版块混的!呵~~~跑到.net里面来逛逛!
不过是分数我都要!哈~~~~~不管在哪儿!
jonsonzxw 2003-03-14
  • 打赏
  • 举报
回复
To SophiaWang

我还在等你讲你的那个SQL语句的思路呢,希望能指教一下,因为即将要作一个更为复杂的查询,可能还烦老兄指教. 还有我刚说的另外的80分是数据库版的,如果你想要的是.NET版块的分数的话,也可以给以前未结的贴子的分数给你,我只要作个说明,并且烦你顶一下该贴子就可以了.

To dragontt

也谢谢你给我一个新的思路,不过我还没作尝试,我想了一下,可能改动比较大,现在有了新的方法也就不用试了,呵呵!

To baitianhai
要知道,高手还是有的,虽然你也是.net高手

To All
谢谢你们的参与!
SophiaWang 2003-03-14
  • 打赏
  • 举报
回复
问题终于解决了!呵~~~~
我的这个SQL的思路啊!就是先按分组条件取出其中日期最新的一条记录!然后,再以这条记录再到原来的数据表中把与它相关的所有信息全都取出来喔!!
jonsonzxw 2003-03-14
  • 打赏
  • 举报
回复
哦,我找到原因了,不是你的错,是我在程序中有一个地方的大小写弄错了,导致该语句没执行到,结果非常正确,只不过在结帐之前,能否大概讲一下你的那个SQL语句的思路吗,对于复杂的SQL语句真的不是很懂,谢谢了,此贴的80分不能完全给你,但作为奖励,你将获得另外的80分和本贴的40分,共120分,呵呵!!
SophiaWang 2003-03-14
  • 打赏
  • 举报
回复
有可以,你是将多种情况共用的一个数据集吗?
jonsonzxw 2003-03-14
  • 打赏
  • 举报
回复
其实程序也就是执行一下那个SQL语句,然后将返回的结果送到数据集,会不会是因为多种查询情况干扰了数据集(你写的那种只是其中的一种情况)
jonsonzxw 2003-03-14
  • 打赏
  • 举报
回复
好象在查询分析器里的结果差不多了,那是怎么回事呢?
SophiaWang 2003-03-14
  • 打赏
  • 举报
回复
declare @Pictures table(PictureID nvarchar(12), Caption nvarchar(80),Contents nvarchar(400),AuditMark nvarchar(1),AuditDate datetime)
declare @PictureDetails table(DetailID int,PictureID nvarchar(12))
insert @Pictures select '000000000000','aaaaaaaa','aaaaaaaa','1','2003-1-1'
insert @Pictures select '000000000001','bbbbbbbb','bbbbbbbb','1','2003-1-2'
insert @Pictures select '000001000000','cccccccc','cccccccc','1','2003-2-3'
insert @Pictures select '000101000000','dddddddd','dddddddd','1','2003-1-15'
insert @Pictures select '000001000001','eeeeee','eeeeee','1','2003-3-2'
insert @Pictures select '000001000002','ffffff','ffffff','0','2003-3-5'

insert @PictureDetails select '000','000000000000'
insert @PictureDetails select '001','000000000001'

--select * from @Pictures

select * from @Pictures a
where exists (
select * from (
select Left(PictureID,6) PictureID,max(AuditDate) AuditDate
from @Pictures
where AuditMark = '1'
group by Left(PictureID,6)
) b
where Left(a.PictureID,6)=Left(b.PictureID,6) and a.AuditDate=b.AuditDate)
SophiaWang 2003-03-14
  • 打赏
  • 举报
回复
是的,看是不是程序有什么问题!
jonsonzxw 2003-03-14
  • 打赏
  • 举报
回复
数据大概是这样的

我将你的SQL语句挂到我程序中运行的,要不到查询分析器中运行一下吧!
SophiaWang 2003-03-14
  • 打赏
  • 举报
回复
是这样吗?
图片ID 标题 内容 审核 审核日期
000000000000 aaaaaaaa aaaaaaaa 1 2003-1-1
000000000001 bbbbbbbb bbbbbbbb 1 2003-1-2
000001000000 cccccccc ccccccc 1 2003-2-3
000101000000 dddddddd ddddddd 1 2003-1-15
000001000001 eeeeee eeeeee 1 2003-3-2
000001000002 ffffff fffff 0 2003-3-5

你是在哪里运行的?
jonsonzxw 2003-03-14
  • 打赏
  • 举报
回复
还是将所有的都取出来了,包括PictureID前6位重复的
SophiaWang 2003-03-14
  • 打赏
  • 举报
回复
select * from @Pictures a
where exists (
select * from (
select Left(PictureID,6) PictureID,max(AuditDate) AuditDate
from @Pictures
where AuditMark = '1'
group by Left(PictureID,6)
) b
where Left(a.PictureID,6)=Left(b.PictureID,6) and a.AuditDate=b.AuditDate)

将@Pictures改为你的表名
jonsonzxw 2003-03-14
  • 打赏
  • 举报
回复
但在我这儿为何全部记录都出来了呢?

你将最后的SQL语句再写出来看看,让我再试试好吗,
SophiaWang 2003-03-14
  • 打赏
  • 举报
回复
这是我的运行结果!


PictureID Caption Contents AuditMark AuditDate
------------ -------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------- ------------------------------------------------------
000000000000 aaaaaaaa aaaaaaaa 1 2003-01-01 00:00:00.000
000000000001 bbbbbbbb bbbbbbbb 1 2003-01-02 00:00:00.000
000001000000 cccccccc cccccccc 1 2003-02-03 00:00:00.000
000101000000 dddddddd dddddddd 1 2003-01-15 00:00:00.000
000001000001 eeeeee eeeeee 1 2003-03-02 00:00:00.000
000001000002 ffffff ffffff 0 2003-03-05 00:00:00.000

(6 row(s) affected)

PictureID Caption Contents AuditMark AuditDate
------------ -------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------- ------------------------------------------------------
000000000001 bbbbbbbb bbbbbbbb 1 2003-01-02 00:00:00.000
000101000000 dddddddd dddddddd 1 2003-01-15 00:00:00.000
000001000001 eeeeee eeeeee 1 2003-03-02 00:00:00.000

(3 row(s) affected)
SophiaWang 2003-03-14
  • 打赏
  • 举报
回复
会吗?
jonsonzxw 2003-03-14
  • 打赏
  • 举报
回复
To SophiaWang:

还是不行呀,结果是有,但所有的都出来的,并不是我想要的呀!!!!
jonsonzxw 2003-03-13
  • 打赏
  • 举报
回复
高手们,出招吧!
加载更多回复(43)

110,532

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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