我有一個表SELECT查詢
ID | DATE
1 | 16-01-2012
2 | 17-01-2012
3 | 18-01-2012
4 | 22-01-2012
5 | 28-01-2012
6 | 02-02-2012
我的任務是:
我有一個date
變量,它被初始化爲16-01-2012
,我必須要找到它們在連續與16-01-2012
所有行即17-01-2012
和18-01-2012
。
請幫忙。
我有一個表SELECT查詢
ID | DATE
1 | 16-01-2012
2 | 17-01-2012
3 | 18-01-2012
4 | 22-01-2012
5 | 28-01-2012
6 | 02-02-2012
我的任務是:
我有一個date
變量,它被初始化爲16-01-2012
,我必須要找到它們在連續與16-01-2012
所有行即17-01-2012
和18-01-2012
。
請幫忙。
一種可能性是使用hierarchical query類似如下:
with data (id, date)
as
(
select id, date from yourtable where date = '16-01-2012'
UNION ALL
select t.id, t.date
from yourtable t
inner join data d
on DATEDIFF(dd, d.date, t.date) = 1
-- 1 day difference
)
select
*
from
data
;
我沒有一個SQL服務器在這裏嘗試了這一點,所以有可能是聲明中的一些錯誤。它應該給你一個想法。
試試這個:
select id, date
from table
where date > date_from_variable
唯一覺得你有噴氣做的,就是你的變量轉換爲正確的日期格式。
樣本:
cast(date_from_variable, smalldate)
-1:這將返回所有大於指定變量的元素,而不管它們之間是否存在間隙。 –
DATEDIFF(dd,t.Date,d.Date)= -1 –
@AdrianIftode:謝謝。 SQL服務器中不是簡單的減法工作嗎? –
不,你的代碼工作正常,但減法沒有。 –