-3

SQL2005でクエリを作成するためのヘルプが必要です。

私には4つの日付があります:1つの標準開始日と3つの比較する日付。datediffを日数で10の範囲で数える必要があります。

datediff(日、開始日、終了日1)

1から10、11から20、21から30の範囲が何回表示されますか。

これは3つの終了日ごとに!

次に、すべての(3つの終了日)1から10 asoの合計(510回<11、275回> 10および<21)

この後、すべての終了日による範囲のパーセンテージを計算します。

510/785 = XX.XX%および275/785 = XX.XX%のように

私は自分自身を明確にしますか?

よろしくお願いします1SeoAdvies

@ mitch-小麦、それは悪い質問ではありません、それは説明するのが難しい質問です!これを説明する表はありません。ほぼすべてのテーブルにデータタイムフィールドがあります。

これを非常に簡単な英語で説明するために、もう一度試してみます。日時フィールドのあるテーブルがあります。エクセルシートには別の日時があります。どちらも同じキーを持っています。datediffを日数で計算する方法を知っています。1から10までのdatediffが何回表示されるか知りたいです。

例:

datediff(day、DateTime1、DateTime2)= 2

datediff(day、DateTime1、DateTime2)= 3

datediff(day、DateTime1、DateTime2)= 11

datediff(day、DateTime1、DateTime2)= 2

datediff(day、DateTime1、DateTime2)= 3

datediff(day、DateTime1、DateTime2)= 11

datediff(day、DateTime1、DateTime2)= 7

datediff(day、DateTime1、DateTime2)= 6

結果は

    < 11  = ***6*** (smaller then 11)

10および<21= 2(10〜21)

結果を合計する6+2 = 8

パーセンテージを計算する:

11 = 6 \ 8 = 75%よりも小さい

11 + <21 = 2 \ 8 = 25%より大きい

太字の/invers項目は、私が必要とする値です。

私は今自分自身を明確にしていますか????????

前もって感謝します

4

1 に答える 1

1

SQLフィドル

MS SQL Server 2008スキーマのセットアップ

create table YourTable
(
  dt1 datetime,
  dt2 datetime
)

insert into YourTable values(getdate(), dateadd(day, 2, getdate()))
insert into YourTable values(getdate(), dateadd(day, 3, getdate()))
insert into YourTable values(getdate(), dateadd(day, 11, getdate()))
insert into YourTable values(getdate(), dateadd(day, 2, getdate()))
insert into YourTable values(getdate(), dateadd(day, 3, getdate()))
insert into YourTable values(getdate(), dateadd(day, 11, getdate()))
insert into YourTable values(getdate(), dateadd(day, 7, getdate()))
insert into YourTable values(getdate(), dateadd(day, 6, getdate()))

クエリ1

select S1 / S2 as 'smaller than 11',
       (S2 - S1) / S2 as 'greater than 11 + < 21'
from (
     select 1.0 * sum(case when datediff(day, dt1, dt2) < 11 then 1 else 0 end) as S1,
            1.0 * sum(case when datediff(day, dt1, dt2) < 21 then 1 else 0 end) as S2
     from YourTable
     where datediff(day, dt1, dt2) < 21
     ) as T

結果

| SMALLER THAN 11 | GREATER THAN 11 + < 21 |
--------------------------------------------
|            0.75 |                   0.25 |
于 2012-12-10T08:31:15.717 に答える