》,截圖如下:
insus.net嘗試寫了程式並做了測試,可以得到預期的結果,sql**可參考和學習之用。
--建立乙個臨時表,將會儲存連續日期的記錄
create
table
#temp
(idd
varchar(10
),sdate
datetime
)declare
@sddatetime
--開始日期
declare
@eddatetime
--結束日期
--在記錄中,找出開始與結束日期
select
@sd=
min(
[sdate
]),
@ed=
max(
[sdate])
from[tt
]declare
@nint=0
--宣告乙個變數,儲存累記錄數
--迴圈日期
while
(@sd
<=
@ed)
begin
--如果存在
ifexists
(select
top1
1from[tt
]where
[sdate]=
@sd)
begin
set@sd
=dateadd
(day,1
,@sd
) --
日期加1天
set@n=@n
+1--記錄加1
endelse
--如果不存在
beginif(
@n>=3)
--判斷是否大於或等於3
insert
into
#temp
select
[idd],
[sdate
]from[tt
]where
[sdate
]between
dateadd
(day,-
@n,@sd)
and@sd
--日期加1天
set@sd
=dateadd
(day,1
,@sd
)set@n=
0--初始化為0
endend
--列出符合條件的記錄
select
*from
#temp
上面的方法,實際可以把if(@n
>=
3)這句中的3改為乙個變數,這樣可以方便以後的程式擴充套件,某一天需要改為連續2天,4天,5天,或任何一天。
SQL查詢出任意連續日期或時間
查詢一年十二個月 select case when length mon 1 then concat 0 mon else mon end months from select m m 1 mon from 表名稱隨便,select m 0 a aa limit 12 查詢出一天二十四小時 sele...
可能存在斷點,查詢出連續的記錄來
在itpub上有一則非常巧妙的 sql技巧,學習一下,記錄在這裡。最初的問題是這樣的 我有乙個表結構,fphm,kshm 2014,00000001 2014,00000002 2014,00000003 2014,00000004 2014,00000005 2014,00000007 2014,...
SQL 連續記錄查詢
1 題目要求輸出的時連續三行的記錄,則可以選擇三張單錶進行自關聯,連線的要求即為id序號的遞增。連線方式為left join 如下圖即為無要求時的連線語句及結果 有圖可知,連線的每一行的 id 時從s1 到s2遞增1,再到s3遞增1。再因為連線的每一行即為代表連續的三行的記錄。根據題目要求,則要求p...