⑴ 有点难度的sql查询
你的情况符合这个例子:
按name分组取val最大的值所在行的数据。
--方法1:
select a.* from tb a where val = (select max(val) from tb where name = a.name) order by a.name
--方法2:
select a.* from tb a where not exists(select 1 from tb where name = a.name and val > a.val)
--方法3:
select a.* from tb a,(select name,max(val) val from tb group by name) b where a.name = b.name and a.val = b.val order by a.name
--方法4:
select a.* from tb a inner join (select name , max(val) val from tb group by name) b on a.name = b.name and a.val = b.val order by a.name
--方法5
select a.* from tb a where 1 > (select count(*) from tb where name = a.name and val > a.val ) order by a.name
⑵ 比较难的SQL 查询语句
create table test
(
LM varchar(2),
DEPART VARCHAR(2),
DEPARTIDE NVARCHAR(20)
)
GO
INSERT TEST VALUES('AA', 'M1', '牵头')
INSERT TEST VALUES('AA', 'M2' ,'配合')
INSERT TEST VALUES('AA', 'M3','配合')
drop proc sp_test
go
create proc sp_test
(
@LM varchar(2)
)
as
declare @dept varchar(2)
declare @all varchar(1000)
set @all = ''
declare cur cursor
for select DEPART FROM TEST where LM=@LM
OPEN cur
FETCH next FROM cur INTO @dept
WHILE @@FETCH_STATUS = 0
begin
FETCH next FROM cur INTO @dept
set @all = @all+@dept+ ','
end
if @all <> ''
select @LM as LM,@all as DEPART
close cur
DEALLOCATE cur
go
exec sp_test 'AA'
说明:搞了半个小时!终于出来了。不知楼主是不是要的这个?
我的理解是,您想要统计某个LM的DEPART,然后把得到的DEPART合成一列是吗?不是的话请再补充谢谢。
wish help.
⑶ 超难的SQL语句
select d,e,f from a,b,c order by e desc;
select d,e,f from (select d,e,f from a union
select d,e,f from b union
select d,e,f from c) order by e desc;
两个都可以吧,你试试看吧
⑷ 高难度sql语句
在oder by message.messagetime desc limit 5后面加上usericon.icontime desc,试试:
oder by message.messagetime desc limit 5,usericon.icontime desc
⑸ 求一条有点难度SQL语句
select id,username,addtime,title from table, (select top 10 username,max(addtime) addtime from table group by username order by addtime desc) t where table.username=t.username and table.addtime=t.addtime
--根据上一个回答稍微更改一下
⑹ 一个非常难的sql语句,新手勿入(做出来了再加分)
s="" - 要形成的字段串
f=.T. - 这个逻辑值用处是找第一个被选择的字段名
*** FOUND ***
FOR i=1 TO thisform.List1.ColumnCount 从这个list的第一项一直到最后循环
IF thisform.List1.Selected(i) 如果这行状态是被选择的
IF f 如果是第一个
*** FOUND ***
s=thisform.List1.value 就赋值给s
f=.F. 第一个做完了。
ELSE 不是第一个
*** FOUND ***
s=s+thisform.List1.value 把字段名放在串后面 ,得加逗号先。
ENDIF
ENDIF
ENDFOR
-- 循环完毕 s形成一个大概是:字段1,字段3,字段4 这样的串
st="select &s from orders into cursor tmp" 把s放入st sql串中。
thisform.Grid1.RecordSource=st 表格1的数据源设为st
-------
结果就是grid1把这个表中,你在list1中复选的字段数据都裂了出来。
错误一般都是方法属性调用错误。最后一个错误还有没加逗号的错误。
-------
加逗号的原因是要生成一个类似 字段1,字段3,字段4 串.
因为sql select语句要求字段列表写成这样的.
⑺ 一个有点难度的SQL语句
不知楼主是否对我de脚本有兴趣
select * from a where
py like 'c%'
and substring(py,charindex(' ',py)+1,1000) like 'm%'
and substring(substring(py,charindex(' ',py)+1,3000),charindex(' ',substring(py,charindex(' ',py)+1,3000))+1,3000) like 'z%'
=================================================
3个字母的检索就写这么长,我10个字母怎么办,要把SQL语句嵌套到什么程度了 ==========================教训的是啊,技术有限啊,
那么接下来,我也在等高人,从技术角度,从算法角度,从效率角度...
等待他出现........
==============================
哎,等的无聊啊,再高手未出现前,我又看了下楼主的题目,有句话我很重视:
“我在检索的时候想检索首字母是c, m, z的记录”那就是写函数,返回字符串中的大写字母,哈,说干就干哪,
=============================
CREATE FUNCTION get_it(
@s varchar(8000) --要处理的字符串
)RETURNS varchar(8000)
AS
BEGIN
DECLARE @len int,@out_str varchar(8000),@cen_str varchar(8000),@a int
set @a=1--循环变量
set @len=len(@s)--字符长度
set @out_str=''
WHILE @a<=@len
begin
set @cen_str=substring(@s,@a,1)
if ascii(@cen_str)>=65 and ascii(@cen_str)<91
begin
set @out_str=@out_str+@cen_str
end
set @a=@a+1
end
RETURN(@out_str)
END
GO
====================================
这次你想加好多字母都行,哦也
select * from a where dbo.get_it(PY) like 'CMDASFDDFASF%'
表的数据量再大也不怕,分割表。我常常把1000W的表分割几个部分来处理。
呵呵,这个问题不回答了,祝你好运,我要朝大鸟方向奋斗啦
⑻ 高难度SQL语句
这个是如何算累计的问题,有多种方法:
这里举一个通用的方法:
SELECT
aa.id
, aa.积分
, SUM(bb.积分) AS 累计积分
FROM jifen_table AS aa
INNER JOIN jifen_table AS bb ON bb.id<=aa.id
GROUP BY aa.id, aa.积分
ORDER BY aa.id,aa.积分
;
就是通过jifen_table自关联,来实现累加。
累计其实就是把当前的积分和之前出现过的都加起来,
关联条件:ON bb.id<=aa.id 就是实现这个功能的。
2.方法二:
使用sum()over() 函数。
此方法oracle,db2支持,其他数据库不知道支不支持。
都是一个语句就ok的,不需要3个步骤 :)
我的空间有类似的案例:
http://hi..com/rsnetwork/blog/item/297c2301c57cea001c958305.html
⑼ 很有难度的SQL语句问题( ̄︶ ̄)↗
select ThemeID,Title,[Datetime] from
(select Row_number() over(partition by ThemeID order by [Datetime] asc) as rownumber,ThemeID,Title,[Datetime] from
(select distinct reply.ThemeID,Title,Reply.Datetime from Theme,Reply where Theme.ThemeID=Reply.ThemeID and Reply.UserID='12301') a)b
where rownumber=1