考考大家,一句高难度的SQL语句!

mybios 2002-08-22 01:24:20
在一个表test中,内容如下
name mydate var1 var2

aaa 2002-1-1 4 7
aaa 2002-1-2 5 6
bbb 2002-1-3 5 8
aaf 2002-1-1 3 9
aaf 2002-1-1 4 4

我需要输入一个变量@name,就如'aaa',然后输出如下结果
aaa 2002-1-2 5 6
即取表中name=@name的记录。然后找出日期最大的那条记录。
这样其实不太难。只是我的要求是只需要执行一个select,不能使用子查询。
而需要使用group by 。inner join之类的语法来完成这句SQL。。。。
嘿嘿。真的有点难度吧?
...全文
43 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lostinet 2002-08-22
  • 打赏
  • 举报
回复
这个应该可以。。

select 'aaa' as name,Convert(date,'2002-1-2),as mydate,5 as var1,6 as var2

lgh21cn 2002-08-22
  • 打赏
  • 举报
回复
不知下面的语句能否实现:
select top 1 *
from test
group by name
order by my_date desc
蓝天 2002-08-22
  • 打赏
  • 举报
回复
用按钮JJ的啊,稍做修改
select abc.*
from abc left join abc t1 on abc.name=t1.name and abc.mydate<t1.mydate and t1.id=abc.id
where t1.name is null

mybios 2002-08-22
  • 打赏
  • 举报
回复
其实是有唯一标识的!否则这个表就是废表啦!大量重复记录!
CREATE TABLE [dbo].[test] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[name] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[var1] [int] NULL ,
[datetimes] [smalldatetime] NULL
) ON [PRIMARY]
GO

yonghengdizhen 2002-08-22
  • 打赏
  • 举报
回复
若再加上一条
aaf 2002-1-1 4 4
yonghengdizhen 2002-08-22
  • 打赏
  • 举报
回复
这几条中你选哪一条??

aaf 2002-1-1 3 4
aaf 2002-1-1 4 4
aaf 2002-1-1 3 9
aaf 2002-1-1 4 9
yonghengdizhen 2002-08-22
  • 打赏
  • 举报
回复
关键问题是这个表没有一个唯一标识一条记录的(一个或多个)字段.
所以本方程无解
mybios 2002-08-22
  • 打赏
  • 举报
回复
意思是说Name相同的只输出mydate最大的记录。对name分组。就这么简单。
Yang_ 2002-08-22
  • 打赏
  • 举报
回复
这个回复应该解决所有问题:


回复人: icevi(按钮工厂) ( ) 信誉:115 2002-08-22 15:41:00 得分:0


select abc.*
from abc left join abc t1 on abc.name=t1.name and abc.mydate<t1.mydate
where t1.name is null

是要这样的吗?你上面有两个aaf 2002-1-1 是不是搞错了?


supsuccess 2002-08-22
  • 打赏
  • 举报
回复
这样吧,我给你改一下,
即name相同的只输出var1最大的一条记录
看行不行??
select t1.name,t1.mydate,t1.var1,t1.var2
from tab t1 join tab t2 on (t1.name=t2.name)
where t1.var1<=t2.var1
group by t1.name,t1.mydate,t1.var1,t1.var2
having count(*)<=1
order by 3 desc

icevi 2002-08-22
  • 打赏
  • 举报
回复
select abc.*
from abc left join abc t1 on abc.name=t1.name and abc.mydate<t1.mydate
where t1.name is null

是要这样的吗?你上面有两个aaf 2002-1-1 是不是搞错了?
supsuccess 2002-08-22
  • 打赏
  • 举报
回复
即name的只输出mydate最大的一条记录??
==即name相同的只输出mydate最大的一条记录??
那么
aaf 2002-1-1 3 9
aaf 2002-1-1 4 4
怎么办???
yonghengdizhen 2002-08-22
  • 打赏
  • 举报
回复
SELECT MAX(TA.mydate) AS Date ,TB.name,TB.var1,TB.var2 from test as TA inner join test TB
ON TA.Date=TB.ydate
Group BY TA.Name
vbFly 2002-08-22
  • 打赏
  • 举报
回复
不用子查询是不可能的
SELECT *
FROM test a
WHERE ((SELECT COUNT(*)
FROM test b
WHERE b.name = a.name AND b.mydate > a.mydate) < 1)
newly_ignorant 2002-08-22
  • 打赏
  • 举报
回复
说了半天不就是Group的问题吗,想显示不在聚合函数中同时不在Group子句中的字段。
这种情况我都是用上面的方法实现的。
蓝天 2002-08-22
  • 打赏
  • 举报
回复
别笑我,我只会这么做

select * from test inner join (select max(mydate) mydate, name group by name )x on x.name = test.name and x.mydate = test.mydate
蓝天 2002-08-22
  • 打赏
  • 举报
回复
按鈕jj的毫无问题啊!你想要什么?把原题贴出来啊
日总是我哥 2002-08-22
  • 打赏
  • 举报
回复

大家看清楚啊~~
楼主是“考考大家”啊
说明楼主自己知道答案才是呀~~~

快把答案说出来吧~
免得烤焦更多的“虾”呀~~
mybios 2002-08-22
  • 打赏
  • 举报
回复
supsuccess(口气不小) 回答的不错。不过你还是使用了两个select
我需要的是使用from test l join test r之类的自联接语句。。。。真的高难度到没人能回答吗?
N_chow 2002-08-22
  • 打赏
  • 举报
回复
不會吧,看清了,按鈕jj的不可以嗎
加载更多回复(11)

34,590

社区成员

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

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