當前位置:首頁 » 編程語言 » 很有難度的sql
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

很有難度的sql

發布時間: 2022-08-27 13:09:12

⑴ 有點難度的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