0

我有一个日期范围(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())还是需要做一些不同的事情?

4

4 回答 4

1

datediff(quarter,date,getdate())返回日期是否在不同的季度,而不是它们是否正好相隔四分之一,我认为这是您正在寻找的。

因此,我希望找到 3 个月前的倍数的日期,并且该日期也位于该月的同一天。

SQL小提琴

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 |
于 2012-12-05T14:32:10.817 回答
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 演示

结果:

| USERID |       DATE |
-----------------------
|   4665 | 2012-09-05 |
|   1251 | 2012-06-05 |
|   7485 | 2011-09-05 |
于 2012-12-05T13:15:51.257 回答
0

尝试这个 ::

Select 
userID, 
`date_column`

from 
table
where `date_column`> DATE_SUB(CURDATE, INTERVAL 3 MONTH)
于 2012-12-05T13:01:20.130 回答
0
Select 
userID, 
`date_column`

from 
table
where DATEDIFF(CURDATE(),date('date_col')) >= 90
于 2012-12-05T13:10:47.630 回答