4

しばらく探しましたが、この質問に対する答えが見つかりません (正しい用語などを検索していない可能性があります)。基本的に、日付ごとに任意の数のエントリを持つデータベースがあります。エントリを含む最後の X 日間の合計を取得する必要があります (エントリのない日は無視します)。毎日の合計を見つける方法を知っています。

「Yield」というテーブルがあるとします。

UnitID  Date        TestTime    NumMeasured NumPassing
1       2013-04-05  10:15       25          3
2       2013-03-31  10:12       30          1
3       2013-03-30  10:12       26          2
4       2013-03-29  10:30       11          1
5       2013-03-31  10:20       6           2
6       2013-04-05  10:30       5           0

次に、次のクエリを使用します。

SELECT DISTINCT 
    Date, 
    (
        SELECT SUM([NumMeasured]) 
        FROM [dbo].[Yield] T1 
        WHERE T1.Date = T2.Date
    ) AS 'NumMeasured', 
    (
        SELECT SUM([NumPassing]) 
        FROM [dbo].[Yield] T1 
        WHERE T1.Date = T2.Date
    ) AS 'NumPassing' 
FROM [dbo].[Yield] T2 

1 日あたりの合計通過/測定値を取得するには:

Date        NumMeasured NumPassing
2013-03-29      11          1
2013-03-30      26          2
2013-03-31      36          3
2013-04-05      30          3

次に、エントリを含む最後の X 日 (たとえば 100 日) を取得し、その数の NumMeasured 列と NumPassing 列の合計を返す日付 (4/05 に呼び出すとします) で呼び出すことができるクエリが必要になります。日々。この部分を機能させることができません。解決するのに十分な経験がないSQLの問題に遭遇し続けています。私は次のようなものを探しています

SELECT
    (
        SELECT TOP 100 SUM(T3.[NumMeasured]) 
        FROM T3 
        WHERE T3.Date <= '4/05/2013' 
        ORDER BY T3.Date
    ) AS 'NumMeasured', 
    (
        SELECT TOP 100 SUM(T3.[NumPassing]) 
        FROM T3 
        WHERE T3.Date <= '4/05/2013' 
        ORDER BY T3.Date
    ) AS 'NumPassing', 
    (
        SELECT DISTINCT 
            Date, 
            (
                SELECT SUM([NumMeasured]) 
                FROM [PhaseNoiseMonitoring].[dbo].[Yield] T1 
                WHERE T1.Date = T2.Date
            ) AS 'NumMeasured', 
            (
                SELECT SUM([NumPassing]) 
                FROM [PhaseNoiseMonitoring].[dbo].[Yield] T1 
                WHERE T1.Date = T2.Date
            ) AS 'NumPassing' 
        FROM [PhaseNoiseMonitoring].[dbo].[Yield] T2 
    )
AS T3

予想されるクエリは次を返します。

NumMeasured NumPassing
103         9

これが完全に間違っていることはわかっていますが、それを機能させる方法が本当にわかりません。

4

2 に答える 2

1

相関サブクエリを使用したアイデアを次に示します。

with bydays as (<your query here>)
select bd.*,
       (select sum(NumMeasured) from (select top 100 * from bydays bd2 where bd2.date <= bd.date order by date desc) t
       ) as Measured100,
       (select sum(NumPassingd) from (select top 100 * from bydays bd2 where bd2.date <= bd.date order by date desc) t
       ) as Measured100
from bydays
于 2013-04-17T18:22:46.910 に答える
0

過去 100 件の日付を取得するには、

SELECT TOP(100) DISTINCT date FROM yield ORDER BY date desc

次のような単純なもので最初のクエリを簡素化できます

SELECT date, SUM(passing) as numpassing, SUM(Measured) as nummeasured
FROM yield
GROUP BY date

現在から100日前までの金額が必要な場合

SELECT SUM(passing) as npassing, SUM(measured) as nmeasured
FROM yield
WHERE date >= DATEADD(d,100,CURRENT)

過去 100 の日付の合計が必要な場合

SELECT SUM(passing) as npassing, SUM(measured) as nmeasured
FROM yield
WHERE date IN (SELECT TOP 100 date FROM yield WHERE date <= '04/05/2013' ORDER BY date desc) 
于 2013-04-17T18:22:28.473 に答える