2

先月の 20 日から今月の 19 日までのデータを収集しているクエリがあり、機能しているようです。

(DateTime >= 19+dateadd(mm,datediff(mm,0,getdate())-1,0)   
AND  DateTime <  18+dateadd(mm,datediff(mm,0,getdate()),0)) 

私は今、以下を満たすために何らかの形でそれを修正する必要があります...

いつ実行されても、常に現在のレポートを表示します。

現在何が起こっているかというと...先月の20日から今月の19日までのいつでも実行するとうまくいきます....しかし、今月の20日から今月の31日まではすぐに実行されます. ...それは最後の期間を表示し続けます....技術的には、私はそれを行うように求めています.

必要なのは……今月の20日になったら……新しいレポートを始めることです。

おっしゃる通り……問題の期間は20日から月末までです。新しい月が始まれば、すべて順調です。

レポートがいつ実行されるかを何らかの形で考慮する必要があります。

ありがとう。

デイブ

4

2 に答える 2

0

デイブ、これはあなたのために働くかもしれないと思います。

    (
         (Day(GetDate()) > 19 and create_date between dateadd(mm, datediff(mm, 0, getdate()), 0) + 19 and dateadd(mm, datediff(mm, 0, getdate()), 0) + 18)
         or (Day(GetDate()) < 20 and create_date between dateadd(mm, datediff(mm, 0, getdate())-1, 0) + 19 and dateadd(mm, datediff(mm, 0, getdate())-1, 0) + 18)
    )

基本的に、現在の日が19より大きいことを確認し、月を減算せずに現在のロジックを適用します。現在の日は、現在のロジックが適用されている20日未満です。

于 2012-10-30T17:00:13.427 に答える
0
(
 DateTime >= CASE WHEN day(GETDATE()) >= 20 THEN 19 + dateadd(mm, datediff(mm, 0, getdate()), 0) ELSE 19 + dateadd(mm, datediff(mm, 0, getdate()) - 1, 0) END AND
 DateTime < CASE WHEN day(GETDATE()) >= 20 THEN 18 + dateadd(mm, datediff(mm, 0, getdate())+ 1, 0) ELSE 18 + dateadd(mm, datediff(mm, 0, getdate()), 0) END
)
于 2012-10-30T17:16:31.647 に答える