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 つまたは複数の四半期を引いた日付に等しいデータを抽出する必要があります (たとえば、今日から 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

これを試して ::

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 に答える
0

SQL Server を使用しているため、今日の値から 1 四半期を引いた値などに一致する再帰クエリを使用して日付のリストを作成し、最終的なリストを取得できます。

;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 に答える