0

我在 sql server 中有一个查询,它显示了一些我不想要的记录。字段的关系如下:

一个 ClientID 可以有多个工作负载 (WorkloadID),但不能反过来(一对多)。每个 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

我希望它不只显示少数可用记录中的 1 条记录,这些记录具有相同的 ClientID、相同的单元和相同的 DWLD。我已经尝试使用 have 子句和 not 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 回答