0

SQL Serverに、必要のないいくつかのレコードを表示しているクエリがあります。フィールドの関係は次のようになります。

ClientIDは複数のワークロード(WorkloadID)を持つことができますが、その逆(1対多)にすることはできません。各WorkloadIDには、ユニットが割り当てられています。各WorkloadIDには、DWLD(日付)が割り当てられています。複数のWorkloadIDは、同じClientID、DWLD、およびUnitを持つことができます。

クエリは次のとおりです。

select 
w.WorkloadID,
w.ClientID,
w.Unit,
w.DWLD

        from 
        Workload as w
        left JOIN Clients as cli
        ON w.ClientID = cli.ClientID

    where

        w.DWLD >= @start AND w.DWLD < @enddate
        and w.IsDeleted <> 1

同じClientID、同じユニット、同じDWLDを持つ、使用可能ないくつかのレコードのうち1つのレコードだけを表示しないようにします。私は、have句を使用してテーブルを自己結合しようとしましたが、exists句はありませんが、正しい結果が得られませんでした。

ありがとう!

クエリから表示されるデータ

ソーステーブル

4

2 に答える 2

0

このクエリを試してください。clientsテーブルからレコードを取得していないときは、それを結合する必要はありません。

select w.WorkloadID, w.ClientID, w.Unit, w.DWLD
from Workload as w
where w.DWLD BETWEEN @start AND  @enddate
and w.IsDeleted <> 1 
AND NOT EXISTS (SELECT * FROM Workload 
WEHRE ClientId = w.clientid 
and unit = w.unit and dwld = w.dwld 
and workloadid < w.workloadid 
and DWLD BETWEEN @start AND  @enddate 
AND IsDeleted <> 1)
于 2013-03-26T21:54:15.610 に答える
0

列DWLDの値が時間/分で異なり、日ごとにグループ化する場合は、cast(cast(DWLD as float)as int)を使用します。

select 
max(w.WorkloadID) as WorkloadID,
w.ClientID,
w.Unit,
w.DWLD

        from 
        Workload as w
        left JOIN Clients as cli
        ON w.ClientID = cli.ClientID

    where

        w.DWLD >= @start AND w.DWLD < @enddate
        and w.IsDeleted <> 1

group by w.ClientID,
w.Unit,
w.DWLD
于 2013-03-26T22:22:25.190 に答える