0

SQL Server テーブルがあります。

CREATE TABLE tblExample
(
ID int,
Name nvarchar(256),
Date datetime,
IsAnual bit
)

これは簡単な例です。

から次の 30 日間をスキャンしGETDATE()ます。結果があれば、別のテーブルに情報を挿入します。

WHERE DATEDIFF(dd, GETDATE(), Date) <= 30

今のところ問題ありません。しかし

WHERE IsAnual = 1

私は彼らの継続を考慮に入れなければなりません。これどうやってするの?

GETDATE()2013-10-22で、列に が含まれていれば2013-10-30問題ありません。GETDATE()is2014-10-28と column に2013-10-30AND IsAnual = 1が含まれている場合はどうなりますか?

更新しました:

解決策を見つけました。再帰クエリを使用しました。

CREATE TABLE tblExample
(
ID int IDENTITY(1,1) PRIMARY KEY NOT NULL,
Name nvarchar(256),
Date datetime,
IsAnual bit
)

そしていくつかの行を挿入しました:

INSERT INTO tblExample
(Name, Date, IsAnual)
VALUES
('A', '2012-11-01', 1),
('B', '2013-11-01', 0),
('C', '2013-01-01', 1)

そして最後のセクションは適切に機能するクエリです:

WITH TempTable AS
(
SELECT
e.ID, 
e.Name, 
e.Date, 
e.IsAnual
FROM tblExample AS e
UNION ALL
SELECT
e.ID, 
e.Name, 
DATEADD(yy, 1, t.Date),
e.IsAnual
FROM tblExample AS e
INNER JOIN TempTable AS t
ON e.ID = t.ID
WHERE e.IsAnual = 1
AND DATEDIFF(yy, t.Date, DATEADD(yy, 1, GETDATE())) > 0
)
SELECT
*
FROM TempTable
WHERE DATEDIFF(dd, GETDATE(), Date) BETWEEN 0 AND 30

結果はこちら:

14  B   01.11.2013  False
13  A   01.11.2013  True
4

2 に答える 2