我有一个日期范围(SQL服务器),如下所示:
UserID, Date
4582, 2012-09-04
4665, 2012-09-05
1251, 2012-06-05
6538, 2011-08-04
7485, 2011-09-05
我需要提取日期等于今天减去一个或多个季度的数据(例如今天减去1个季度,今天减去2个季度等)
在这种情况下,应返回的数据是:
UserID, Date
4665, 2012-09-05
1251, 2012-06-05
7485, 2011-09-05
我可以使用datediff(quarter,date,getdate())
创建此查询,还是需要执行不同的操作?
答案 0 :(得分:1)
datediff(quarter,date,getdate())
返回日期是否在不同的季度,而不是它们是否恰好相隔四分之一,我认为这是您正在寻找的。
所以我希望找到3个月之前的日期,并且也是在该月的同一天。
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])
<强> Results 强>:
| USERID | DATE |
-----------------------
| 4665 | 2012-09-05 |
| 1251 | 2012-06-05 |
| 7485 | 2011-09-05 |
答案 1 :(得分:0)
试试这个::
Select
userID,
`date_column`
from
table
where `date_column`> DATE_SUB(CURDATE, INTERVAL 3 MONTH)
答案 2 :(得分:0)
Select
userID,
`date_column`
from
table
where DATEDIFF(CURDATE(),date('date_col')) >= 90
答案 3 :(得分: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
结果:
| USERID | DATE |
-----------------------
| 4665 | 2012-09-05 |
| 1251 | 2012-06-05 |
| 7485 | 2011-09-05 |