2012-12-05 23 views
0

我有一個日期範圍(SQL服務器),如下所示:提取數據行今天減去一個或多個季度

UserID, Date 
4582, 2012-09-04 
4665, 2012-09-05 
1251, 2012-06-05 
6538, 2011-08-04 
7485, 2011-09-05 

我需要提取其中date等於今天減去一個或多個季度的數據(例如,今天零下1四,今日減去2個季度等)

在這種情況下應該返回的數據是:

UserID, Date 
4665, 2012-09-05 
1251, 2012-06-05 
7485, 2011-09-05 

可以用datediff(quarter,date,getdate())我創建這個查詢或者我需要ŧ o做一些不同的事情?

回答

0

試試這個::

Select 
userID, 
`date_column` 

from 
table 
where `date_column`> DATE_SUB(CURDATE, INTERVAL 3 MONTH) 
+0

不幸的是我不能使用DATE_SUB – user1519923

+0

爲什麼不能使用DATE_SUB? 和DATEDIFF怎麼樣?你可以使用它嗎? –

+0

這不是一個公認的內置函數名稱。我可以使用DATEDIFF – user1519923

0
Select 
userID, 
`date_column` 

from 
table 
where DATEDIFF(CURDATE(),date('date_col')) >= 90 
0

由於您使用的是SQL Server,您可以創建日期列表相匹配今天減一季度值遞歸查詢,等等,然後得到你的最終名單:

;with dates (value) as 
(
    select cast(getdate() as date) 
    union all 
    select dateadd(quarter, -1, value) 
    from dates 
    where dateadd(quarter, -1, value) >= '2010-01-01' 
) 
select userid, date 
from yourtable t 
inner join dates d 
    on t.date = d.value 

SQL Fiddle Demo

結果:

| USERID |  DATE | 
----------------------- 
| 4665 | 2012-09-05 | 
| 1251 | 2012-06-05 | 
| 7485 | 2011-09-05 | 
1

datediff(quarter,date,getdate())返回日期是否在單獨的季度而不是它們是否恰好相差四分之一,我認爲這是您正在尋找的。

所以我會尋找找到3個月前的倍數的日期,也是在同一個月的同一天。

SQL Fiddle

MS SQL Server 2008的架構設置

CREATE TABLE tableA 
    ([UserID] int, [Date] date); 

INSERT INTO tablea 
    ([UserID], [Date]) 
VALUES 
    (4582, '2012-09-04'), 
    (4665, '2012-09-05'), 
    (1251, '2012-06-05'), 
    (6538, '2011-08-04'), 
    (7485, '2011-09-05'); 

查詢1

SELECT * 
FROM TableA 
WHERE 
    -- Only get dates which are a multiple of 3 months previosuly 
    DATEDIFF(mm, [DATE], GETDATE()) % 3 = 0 
    -- only get dates that fall on the same day of the month 
    AND DAY(GETDATE()) = DAY([Date]) 

​​

| USERID |  DATE | 
----------------------- 
| 4665 | 2012-09-05 | 
| 1251 | 2012-06-05 | 
| 7485 | 2011-09-05 | 
+0

這是完美的 - 非常感謝 – user1519923

+0

@ user1519923沒有問題,如果這是你的正確答案,你能否接受我的答案作爲接受的答案。請參閱http://stackoverflow.com/faq#howtoask。謝謝 –